Hi Kevin,

As indicated in the previous mails, this patch has not been verified.
I do not have a DM6467 board for personal use, so I cannot perform
this step myself.
In those mails I also requested for someone else to quick-test this patch.

Regards,
Stijn

On Wed, Apr 15, 2009 at 9:53 PM, Kevin Hilman
<[email protected]>wrote:

> Stijn,
>
> This one applies, thanks!  Also, it is customary to report in the
> description how or if the patch was tested and on what hardware.
>
> I assume this was tested on DM6467 EVM and resulted in some pretty
> blinking lights?
>
> Thanks,
>
> Kevin
>
> Stijn Devriendt <[email protected]> writes:
>
> > Signed-off-by: Stijn Devriendt <[email protected]>
> > ---
> >  arch/arm/mach-davinci/board-dm646x-evm.c |  145
> ++++++++++++++++++++++++++++++
> >  1 files changed, 145 insertions(+), 0 deletions(-)
> >
> > diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c
> b/arch/arm/mach-davinci/board-dm646x-evm.c
> > index 6b1f323..d523ade 100644
> > --- a/arch/arm/mach-davinci/board-dm646x-evm.c
> > +++ b/arch/arm/mach-davinci/board-dm646x-evm.c
> > @@ -25,6 +25,8 @@
> >  #include <linux/dma-mapping.h>
> >  #include <linux/serial.h>
> >  #include <linux/serial_8250.h>
> > +#include <linux/leds.h>
> > +#include <linux/gpio.h>
> >
> >  #include <asm/setup.h>
> >  #include <linux/io.h>
> > @@ -43,6 +45,7 @@
> >  #include <linux/platform_device.h>
> >  #include <linux/i2c.h>
> >  #include <linux/i2c/at24.h>
> > +#include <linux/i2c/pcf857x.h>
> >  #include <linux/etherdevice.h>
> >  #include <mach/emac.h>
> >
> > @@ -54,6 +57,144 @@ static struct davinci_board_config_kernel
> davinci_evm_config[] __initdata = {
> >       { DAVINCI_TAG_UART,     &davinci_evm_uart_config },
> >  };
> >
> > +/* LEDS */
> > +
> > +static struct gpio_led evm_leds[] = {
> > +     { .name = "DS1", .active_low = 1, },
> > +     { .name = "DS2", .active_low = 1, },
> > +     { .name = "DS3", .active_low = 1, },
> > +     { .name = "DS4", .active_low = 1, },
> > +};
> > +
> > +static __initconst struct gpio_led_platform_data evm_led_data = {
> > +     .num_leds = ARRAY_SIZE(evm_leds),
> > +     .leds     = evm_leds,
> > +};
> > +
> > +static struct platform_device *evm_led_dev;
> > +
> > +static int evm_led_setup(struct i2c_client *client, int gpio,
> > +                     unsigned int ngpio, void *c)
> > +{
> > +     struct gpio_led *leds = evm_leds;
> > +     int status;
> > +
> > +     while (ngpio--) {
> > +             leds->gpio = gpio++;
> > +             leds++;
> > +     };
> > +
> > +     evm_led_dev = platform_device_alloc("leds-gpio", 0);
> > +     platform_device_add_data(evm_led_dev, &evm_led_data,
> > +                             sizeof(evm_led_data));
> > +
> > +     evm_led_dev->dev.parent = &client->dev;
> > +     status = platform_device_add(evm_led_dev);
> > +     if (status < 0) {
> > +             platform_device_put(evm_led_dev);
> > +             evm_led_dev = NULL;
> > +     }
> > +     return status;
> > +}
> > +
> > +static int evm_led_teardown(struct i2c_client *client, int gpio,
> > +                             unsigned ngpio, void *c)
> > +{
> > +     if (evm_led_dev) {
> > +             platform_device_unregister(evm_led_dev);
> > +             evm_led_dev = NULL;
> > +     }
> > +     return 0;
> > +}
> > +
> > +static int evm_sw_gpio[4] = { -EINVAL, -EINVAL, -EINVAL, -EINVAL };
> > +
> > +static int evm_sw_setup(struct i2c_client *client, int gpio,
> > +                     unsigned ngpio, void *c)
> > +{
> > +     int status;
> > +     int i;
> > +     char label[10];
> > +
> > +     for (i = 0; i < 4; ++i) {
> > +             snprintf(label, 10, "user_sw%d", i);
> > +             status = gpio_request(gpio, label);
> > +             if (status)
> > +                     goto out_free;
> > +             evm_sw_gpio[i] = gpio++;
> > +
> > +             status = gpio_direction_input(evm_sw_gpio[i]);
> > +             if (status) {
> > +                     gpio_free(evm_sw_gpio[i]);
> > +                     evm_sw_gpio[i] = -EINVAL;
> > +                     goto out_free;
> > +             }
> > +
> > +             status = gpio_export(evm_sw_gpio[i], 0);
> > +             if (status) {
> > +                     gpio_free(evm_sw_gpio[i]);
> > +                     evm_sw_gpio[i] = -EINVAL;
> > +                     goto out_free;
> > +             }
> > +     }
> > +     return status;
> > +out_free:
> > +     for (i = 0; i < 4; ++i) {
> > +             if (evm_sw_gpio[i] != -EINVAL) {
> > +                     gpio_free(evm_sw_gpio[i]);
> > +                     evm_sw_gpio[i] = -EINVAL;
> > +             }
> > +     }
> > +     return status;
> > +}
> > +
> > +static int evm_sw_teardown(struct i2c_client *client, int gpio,
> > +                     unsigned ngpio, void *c)
> > +{
> > +     int i;
> > +
> > +     for (i = 0; i < 4; ++i) {
> > +             if (evm_sw_gpio[i] != -EINVAL) {
> > +                     gpio_unexport(evm_sw_gpio[i]);
> > +                     gpio_free(evm_sw_gpio[i]);
> > +                     evm_sw_gpio[i] = -EINVAL;
> > +             }
> > +     }
> > +     return 0;
> > +}
> > +
> > +static int evm_pcf_setup(struct i2c_client *client, int gpio,
> > +                     unsigned int ngpio, void *c)
> > +{
> > +     int status;
> > +
> > +     if (ngpio < 8)
> > +             return -EINVAL;
> > +
> > +     status = evm_sw_setup(client, gpio, 4, c);
> > +     if (status)
> > +             return status;
> > +
> > +     return evm_led_setup(client, gpio+4, 4, c);
> > +}
> > +
> > +static int evm_pcf_teardown(struct i2c_client *client, int gpio,
> > +                     unsigned int ngpio, void *c)
> > +{
> > +     BUG_ON(ngpio < 8);
> > +
> > +     evm_sw_teardown(client, gpio, 4, c);
> > +     evm_led_teardown(client, gpio+4, 4, c);
> > +
> > +     return 0;
> > +}
> > +
> > +static struct pcf857x_platform_data pcf_data = {
> > +     .gpio_base      = DAVINCI_N_GPIO+1,
> > +     .setup          = evm_pcf_setup,
> > +     .teardown       = evm_pcf_teardown,
> > +};
> > +
> >  /* Most of this EEPROM is unused, but U-Boot uses some data:
> >   *  - 0x7f00, 6 bytes Ethernet Address
> >   *  - ... newer boards may have more
> > @@ -104,6 +245,10 @@ static struct i2c_board_info __initdata i2c_info[] =
>  {
> >               I2C_BOARD_INFO("24c256", 0x50),
> >               .platform_data  = &eeprom_info,
> >       },
> > +     {
> > +             I2C_BOARD_INFO("pcf8574a", 0x38),
> > +             .platform_data  = &pcf_data,
> > +     },
> >  };
> >
> >  static struct davinci_i2c_platform_data i2c_pdata = {
> > --
> > 1.5.6.4
>
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to