diff options
Diffstat (limited to 'src/usr/gpio/gpiodd.C')
-rw-r--r-- | src/usr/gpio/gpiodd.C | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/src/usr/gpio/gpiodd.C b/src/usr/gpio/gpiodd.C index 559dab79e..50fa193c5 100644 --- a/src/usr/gpio/gpiodd.C +++ b/src/usr/gpio/gpiodd.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2018 */ +/* Contributors Listed Below - COPYRIGHT 2014,2019 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -34,6 +34,8 @@ #include <devicefw/driverif.H> #include "gpiodd.H" #include <gpio/gpioddreasoncodes.H> +#include <gpio/gpioif.H> +#include <config.h> trace_desc_t * g_trac_gpio = NULL; TRAC_INIT( & g_trac_gpio, GPIO_COMP_NAME, KILOBYTE ); @@ -57,6 +59,11 @@ DEVICE_REGISTER_ROUTE( DeviceFW::WILDCARD, TARGETING::TYPE_MEMBUF, gpioPerformOp); +DEVICE_REGISTER_ROUTE( DeviceFW::WILDCARD, + DeviceFW::GPIO, + TARGETING::TYPE_PROC, + gpioPerformOp); + errlHndl_t gpioPerformOp(DeviceFW::OperationType i_opType, TARGETING::Target * i_target, void * io_buffer, @@ -237,20 +244,51 @@ errlHndl_t gpioReadAttributes ( TARGETING::Target * i_target, { errlHndl_t err = NULL; - TARGETING::GpioInfo gpioData; - bool attrReadErr = false; +#ifndef CONFIG_FSP_BUILD + TARGETING::GpioInfo gpioData; +#endif + TARGETING::GpioInfoPhysPres gpioDataPhysPres; switch(io_gpioInfo.deviceType) { +#ifndef CONFIG_FSP_BUILD case PCA95X_GPIO: if( !( i_target-> tryGetAttr<TARGETING::ATTR_GPIO_INFO>( gpioData ) ) ) { attrReadErr = true; } + else + { + io_gpioInfo.i2cMasterPath = gpioData.i2cMasterPath; + io_gpioInfo.engine = gpioData.engine; + io_gpioInfo.i2cPort = gpioData.port; + io_gpioInfo.i2cDeviceAddr = gpioData.devAddr; + io_gpioInfo.i2cMuxBusSelector = gpioData.i2cMuxBusSelector; + io_gpioInfo.i2cMuxPath = gpioData.i2cMuxPath; + } break; +#endif + case PCA9551_GPIO_PHYS_PRES: + + if( !( i_target-> + tryGetAttr<TARGETING::ATTR_GPIO_INFO_PHYS_PRES>(gpioDataPhysPres))) + { + attrReadErr = true; + } + else + { + io_gpioInfo.i2cMasterPath = gpioDataPhysPres.i2cMasterPath; + io_gpioInfo.engine = gpioDataPhysPres.engine; + io_gpioInfo.i2cPort = gpioDataPhysPres.port; + io_gpioInfo.i2cDeviceAddr = gpioDataPhysPres.devAddr; + io_gpioInfo.i2cMuxBusSelector = gpioDataPhysPres.i2cMuxBusSelector; + io_gpioInfo.i2cMuxPath = gpioDataPhysPres.i2cMuxPath; + } + break; + default: TRACFCOMP( g_trac_gpio,ERR_MRK"gpioReadAttributes() - " @@ -309,16 +347,6 @@ errlHndl_t gpioReadAttributes ( TARGETING::Target * i_target, err->collectTrace( GPIO_COMP_NAME ); } - if( !err ) - { - io_gpioInfo.i2cMasterPath = gpioData.i2cMasterPath; - io_gpioInfo.engine = gpioData.engine; - io_gpioInfo.i2cPort = gpioData.port; - io_gpioInfo.i2cDeviceAddr = gpioData.devAddr; - io_gpioInfo.i2cMuxBusSelector = gpioData.i2cMuxBusSelector; - io_gpioInfo.i2cMuxPath = gpioData.i2cMuxPath; - } - return err; } |