The function pcr_clrsetbits32() expects a device with a P2SB parent
device. In intel_gpio_direction_output() and intel_gpio_set_value()
the device 'dev' is passed to pcr_clrsetbits32(), which is a
gpio-controller with a device 'pinctrl' as parent. This does not match
the expectations of pcr_clrsetbits32(). But the 'pinctrl' device has a
P2SB as parent.

Pass the 'pinctrl' device instead of the 'dev' device to
pcr_clrsetbits32().

Signed-off-by: Wolfgang Wallner <wolfgang.wall...@br-automation.com>

---

Changes in v2:
- Fixed typo in the commit description
- Fixed the same error in both intel_gpio_direction_output() and
intel_gpio_set_value() (Thanks to Bin Meng for catching this)
- Reworded commit description

 drivers/gpio/intel_gpio.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/intel_gpio.c b/drivers/gpio/intel_gpio.c
index 4bf1c9ddc4..b05cfc4aed 100644
--- a/drivers/gpio/intel_gpio.c
+++ b/drivers/gpio/intel_gpio.c
@@ -39,7 +39,7 @@ static int intel_gpio_direction_output(struct udevice *dev, 
uint offset,
        struct udevice *pinctrl = dev_get_parent(dev);
        uint config_offset = intel_pinctrl_get_config_reg_addr(pinctrl, offset);
 
-       pcr_clrsetbits32(dev, config_offset,
+       pcr_clrsetbits32(pinctrl, config_offset,
                         PAD_CFG0_MODE_MASK | PAD_CFG0_RX_STATE |
                                  PAD_CFG0_TX_DISABLE,
                         PAD_CFG0_MODE_GPIO | PAD_CFG0_RX_DISABLE |
@@ -72,7 +72,7 @@ static int intel_gpio_set_value(struct udevice *dev, unsigned 
offset, int value)
        struct udevice *pinctrl = dev_get_parent(dev);
        uint config_offset = intel_pinctrl_get_config_reg_addr(pinctrl, offset);
 
-       pcr_clrsetbits32(dev, config_offset, PAD_CFG0_TX_STATE,
+       pcr_clrsetbits32(pinctrl, config_offset, PAD_CFG0_TX_STATE,
                         value ? PAD_CFG0_TX_STATE : 0);
 
        return 0;
-- 
2.25.0


Reply via email to