Jani, Please see my comments below. On Tue, Mar 10, 2009 at 4:26 AM, Jani Nikula <ext-jani.1.nikula@xxxxxxxxx> wrote: > The switchover to cross-platform GPIO interface unexpectedly caused all > output GPIO switches to be set to high state by default, unlike the > original OMAP code. Introduce a new GPIO switch flag to define the > initial state. Unless the flag is set, the default is now low state. > > Also store the state of output switches directly into the switch struct > instead of trying to read an output GPIO. > > Signed-off-by: Jani Nikula <ext-jani.1.nikula@xxxxxxxxx> > --- > arch/arm/plat-omap/gpio-switch.c | 13 +++++++++---- > arch/arm/plat-omap/include/mach/gpio-switch.h | 1 + > 2 files changed, 10 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/plat-omap/gpio-switch.c b/arch/arm/plat-omap/gpio-switch.c > index 2b5665d..b278024 100644 > --- a/arch/arm/plat-omap/gpio-switch.c > +++ b/arch/arm/plat-omap/gpio-switch.c > @@ -286,12 +286,17 @@ static int __init new_switch(struct gpio_switch *sw) > > /* input: 1, output: 0 */ > direction = !(sw->flags & OMAP_GPIO_SWITCH_FLAG_OUTPUT); > - if (direction) > + if (direction) { > gpio_direction_input(sw->gpio); > - else > - gpio_direction_output(sw->gpio, true); > + sw->state = gpio_sw_get_state(sw); > + } else { > + int state = sw->state = > + !!(sw->flags & OMAP_GPIO_SWITCH_FLAG_OUTPUT_INIT_HIGH); > > - sw->state = gpio_sw_get_state(sw); > + if (sw->flags & OMAP_GPIO_SWITCH_FLAG_INVERTED) > + state = !state; Using OMAP_GPIO_SWITCH_FLAG_INVERTED along with OMAP_GPIO_SWITCH_FLAG_OUTPUT_INIT_HIGH here is somewhat confusing to me. INIT_HIGH indicates the state of the gpio, not the state of the switch. Why not ignore the OMAP_GPIO_SWITCH_FLAG_INVERTED all together when setting up the switch. This way, the user does not have to think twice. :) > + gpio_direction_output(sw->gpio, state); > + } > > r = 0; > r |= device_create_file(&sw->pdev.dev, &dev_attr_state); > diff --git a/arch/arm/plat-omap/include/mach/gpio-switch.h b/arch/arm/plat-omap/include/mach/gpio-switch.h > index a143253..107d23f 100644 > --- a/arch/arm/plat-omap/include/mach/gpio-switch.h > +++ b/arch/arm/plat-omap/include/mach/gpio-switch.h > @@ -29,6 +29,7 @@ > #define OMAP_GPIO_SWITCH_TYPE_ACTIVITY 0x0002 > #define OMAP_GPIO_SWITCH_FLAG_INVERTED 0x0001 > #define OMAP_GPIO_SWITCH_FLAG_OUTPUT 0x0002 > +#define OMAP_GPIO_SWITCH_FLAG_OUTPUT_INIT_HIGH 0x0004 > > struct omap_gpio_switch { > const char *name; > -- > 1.6.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html