Hi Peng, On 4 April 2016 at 23:04, Peng Fan <[email protected]> wrote: > Hi Stefano, > > On Sun, Apr 03, 2016 at 08:09:35PM +0200, Stefano Babic wrote: >>Hi Peng, >> >>On 17/03/2016 02:44, Peng Fan wrote: >>> On Wed, Mar 16, 2016 at 09:48:24AM -0300, Fabio Estevam wrote: >>>> Hi Peng, >>>> >>>> On Tue, Mar 15, 2016 at 10:27 PM, Peng Fan <[email protected]> wrote: >>>> >>>>> If set the SION bit, we need to change the pinmux settings in device tree, >>>>> however device tree are introduced from linux kernel. I would not like >>>>> to change the pinmux setting value. >>>>> >>>>> So I choose to use data register but not PSR register. >>>> >>>> Haven't checked the kernel driver, but just curious: how does the >>>> kernel handle this? >>> >>> bgc->gc.get = bgpio_get; >>> >>> The get method: >>> * @get: returns value for signal "offset"; for output signals this >>> * returns either the value actually sensed, or zero >>> >>> 138 static int bgpio_get(struct gpio_chip *gc, unsigned int gpio) >>> 139 { >>> 140 struct bgpio_chip *bgc = to_bgpio_chip(gc); >>> 141 >>> 142 return !!(bgc->read_reg(bgc->reg_dat) & bgc->pin2mask(bgc, >>> gpio)); >>> 143 } >>> >>> The gpio subsystem use reg_data. The reg_data is GPIO_PSR for gpio-mxc.c: >>> >>> 450 err = bgpio_init(&port->bgc, &pdev->dev, 4, >>> 451 port->base + GPIO_PSR, >>> 452 port->base + GPIO_DR, NULL, >>> 453 port->base + GPIO_GDIR, NULL, 0); >>> >>> So we know that kernel gpio-mxc use GPIO_PSR for reading data, but >>> as the comments for get method "for output signals this returns >>> either the value actually sensed, or zero", if no SION bit set, reading >>> PSR will return 0 with direction output. >>> >> >>There was already a debate in the past about this point. You can take a >>look at the commit: >> >>commit 5dafa4543c399d329c7b01df1afa98437861cac0 >>Author: Benoît Thébaudeau <[email protected]> >>Date: Mon Aug 20 10:55:41 2012 +0000 >> >> mxc: Make gpio_get_value() use PSR >> >> >>There were good reasons to switch to PSR (mxc-gpio used DR before) - we >>cannot switch any time back to solve a single issue. >> >>I would like to remain compliant with Linux - your change breaks also >>boards that rely on this behavior. > > Thanks for this. I'll look at whether I can have some new way.
Two possible ideas: 1. Cache the output state in the driver so you can return it 2. Add a new get_output_value() method to the uclass (although maybe I misunderstand the problem here) > > Regards, > Peng. >> >> >>> But in U-Boot, the regulator driver needs to get the value when direction is >>> configured as output, we can use data register here or configure SION in >>> pinmux. >>> But I prefer using data register here. >>> >> >>Best regards, >>Stefano >> >>-- >>===================================================================== >>DENX Software Engineering GmbH, Managing Director: Wolfgang Denk >>HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany >>Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: [email protected] >>===================================================================== Regards, Simon _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

