Re: [PATCH v2 2/7] ARM: OMAP1: ams-delta: convert latches tobasic_mmio_gpio

From: Tony Lindgren
Date: Mon Dec 19 2011 - 19:06:07 EST


* Janusz Krzysztofik <jkrzyszt@xxxxxxxxxxxx> [111219 14:41]:
> Once ready, ams-delta specific device drivers currently calling custom
> ams_delta_latch[12]_write() functions can be updated to call generic
> gpio_set_value() instead, which will make them less platform dependent.
> Even more, some custom ams-delta only drivers can perhaps be dropped
> from the tree after converting selected ams-delta platform devices to
> follow generic GPIO based device models.
>
> Depends on patch 1/7, "ARM: OMAP1: ams-delta: register latch dependent
> devices later".

Hmm looking at this maybe you can move the all the latch stuff into
a device driver?

Then you can have the other drivers register with it and let the
module dependencies take care of the init order?

You should only register the platform_device entries in your board-*.c
file, I don't think you actually need to do anything there to power
up things in the board-*.c file execept for the 8250.c driver?

> +static struct gpio latch_gpios[] __initconst = {
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_CAMERA,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_camera",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_ADVERT,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_advert",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_EMAIL,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_email",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_HANDSFREE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_handsfree",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_VOICEMAIL,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_voicemail",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LED_VOICE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "led_voice",
> + },
> + {
> + .gpio = AMS_DELTA_LATCH1_GPIO_BASE + 6,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "dockit1",
> + },
> + {
> + .gpio = AMS_DELTA_LATCH1_GPIO_BASE + 7,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "dockit2",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LCD_VBLEN,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "lcd_vblen",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_LCD_NDISP,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "lcd_ndisp",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_NCE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_nce",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_NRE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_nre",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_NWP,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_nwp",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_NWE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_nwe",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_ALE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_ale",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_NAND_CLE,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "nand_cle",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_PWR,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "keybrd_pwr",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_DATAOUT,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "keybrd_dataout",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_SCARD_RSTIN,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "scard_rstin",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_SCARD_CMDVCC,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "scard_cmdvcc",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_MODEM_NRESET,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "modem_nreset",
> + },
> + {
> + .gpio = AMS_DELTA_GPIO_PIN_MODEM_CODEC,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "modem_codec",
> + },
> + {
> + .gpio = AMS_DELTA_LATCH2_GPIO_BASE + 14,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "hookflash1",
> + },
> + {
> + .gpio = AMS_DELTA_LATCH2_GPIO_BASE + 15,
> + .flags = GPIOF_OUT_INIT_LOW,
> + .label = "hookflash2",
> + },
> +};
> +
> +void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value)
> +{
> + int bit = 0;
> + u16 bitpos = 1 << bit;
> +
> + for (; bit < ngpio; bit++, bitpos = bitpos << 1) {
> + if (!(mask & bitpos))
> + continue;
> + gpio_set_value(base + bit, (value & bitpos) != 0);
> + }
> +}
> +EXPORT_SYMBOL(ams_delta_latch_write);

This part especially looks like it really should be just a regular
device driver under drivers/ somewhere. That might simplify things
quite a bit for you..

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/