Stijn Devriendt <[email protected]> writes:

> 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.
>

OK, I pushed this patch so it should now get some testing.  I don't
currently have access to my dm6467 due to travel, but can try it next
week.

Thanks,

Kevin

>
> 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