Message ID | 1407946582-20927-2-git-send-email-grygorii.strashko@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Aug 13, 2014 at 6:16 PM, Grygorii Strashko <grygorii.strashko@ti.com> wrote: > Some SoCs (like Keystone) may require to perform special > sequence of operations to assign output GPIO value, so default > implementation of .set() callback from gpio-syscon driver > can't be used. > > Hence, add optional, SoC specific callback to assign output > gpio value. > > Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> Hm :-/ I didn't realize this wasn't a quite so straight-forward a syscon GPIO driver. Now I start to think that it looks kludgy to bolt this onto the other driver and think we may need to go back to the other version which puts it as a separate driver. I guess that is what you refer to as v1? I have a hard time to make my mind up about these syscon things, sorry :-( Now I have to ask you: which way do you prefer to do it, if you can choose freely? The initial driver or augmenting the syscon driver (patch v1)? Yours, Linus Walleij
Hi Linus, On 08/29/2014 09:19 AM, Linus Walleij wrote: > On Wed, Aug 13, 2014 at 6:16 PM, Grygorii Strashko > <grygorii.strashko@ti.com> wrote: > >> Some SoCs (like Keystone) may require to perform special >> sequence of operations to assign output GPIO value, so default >> implementation of .set() callback from gpio-syscon driver >> can't be used. >> >> Hence, add optional, SoC specific callback to assign output >> gpio value. >> >> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> > > Hm :-/ > > I didn't realize this wasn't a quite so straight-forward a > syscon GPIO driver. Yep. At first glance, everything seemed more simple. > > Now I start to think that it looks kludgy to bolt this onto > the other driver and think we may need to go back to the > other version which puts it as a separate driver. I guess > that is what you refer to as v1? > > I have a hard time to make my mind up about these > syscon things, sorry :-( > > Now I have to ask you: which way do you prefer to do it, > if you can choose freely? The initial driver or augmenting > the syscon driver (patch v1)? Honestly, I think, It is better to keep Keystone 2 functionality in standalone file [1], as it allows to simply manage this code using build system, avoid ugly #ifdefs in code (as you note on patch 3) and keep commits history more clear and HW specific (very helpful in case of any issues). But, as you agree now to take this syscon-based patches, I'll update & re-send them, applying comments from Alexander to the patch 1 and your comments to the patch 3 :) Thanks for your comments. [1] https://lkml.org/lkml/2014/7/23/352 Best regards, -grygorii
diff --git a/drivers/gpio/gpio-syscon.c b/drivers/gpio/gpio-syscon.c index 30884fb..03b4699 100644 --- a/drivers/gpio/gpio-syscon.c +++ b/drivers/gpio/gpio-syscon.c @@ -37,6 +37,8 @@ * dat_bit_offset: Offset (in bits) to the first GPIO bit. * dir_bit_offset: Optional offset (in bits) to the first bit to switch * GPIO direction (Used with GPIO_SYSCON_FEAT_DIR flag). + * set: HW specific callback to assigns output value + * for signal "offset" */ struct syscon_gpio_data { @@ -45,6 +47,8 @@ struct syscon_gpio_data { unsigned int bit_count; unsigned int dat_bit_offset; unsigned int dir_bit_offset; + void (*set)(struct gpio_chip *chip, + unsigned offset, int value); }; struct syscon_gpio_priv { @@ -77,6 +81,11 @@ static void syscon_gpio_set(struct gpio_chip *chip, unsigned offset, int val) struct syscon_gpio_priv *priv = to_syscon_gpio(chip); unsigned int offs = priv->data->dat_bit_offset + offset; + if (priv->data->set) { + priv->data->set(chip, offset, val); + return; + } + regmap_update_bits(priv->syscon, (offs / SYSCON_REG_BITS) * SYSCON_REG_SIZE, BIT(offs % SYSCON_REG_BITS),
Some SoCs (like Keystone) may require to perform special sequence of operations to assign output GPIO value, so default implementation of .set() callback from gpio-syscon driver can't be used. Hence, add optional, SoC specific callback to assign output gpio value. Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> --- drivers/gpio/gpio-syscon.c | 9 +++++++++ 1 file changed, 9 insertions(+)