Manjunath,

> > > > > > > +
> > > > > > > +static void omap_ethernet_init(void)
> > > > > > > +{
> > > > > > > + gpio_request(ETHERNET_KS8851_POWER_ENABLE, "ethernet");
> > > > > > > + gpio_direction_output(ETHERNET_KS8851_POWER_ENABLE, 1);
> > > > > > > + gpio_request(ETHERNET_KS8851_QUART, "quart");
> > > > > > > + gpio_direction_output(ETHERNET_KS8851_QUART, 1);
> > > > > > > + gpio_request(ETHERNET_KS8851_IRQ, "ks8851");
> > > > > >
> > > > > > Any reason for not checking return value of gpio_request()?
> > > > > >

[snip]

> Minor changes:
> if (gpio_request(x))
>       return status;
> if (gpio_request(y))
>       goto err1;
> if (gpio_request(z))
>       goto err2;
> ...
>       return 0;
> 
> err2:
>       free(y);
> 
> err1:
>       free(x);
>       return status;

How about this patch?

Note. I am thinking in spi_register_board_info registration:

1. to be done if ethernet fails, other spi dev can be added in future
2. not to be done if ethernet fails, no other dev in spi bus 1 for now

What is the best approach? Is it to keep #2?

---

#define ETH_KS8851_IRQ                  34
#define ETH_KS8851_POWER_ON             48
#define ETH_KS8851_QUART                138

static struct spi_board_info sdp4430_spi_board_info[] __initdata = {
        {
                .modalias               = "ks8851",
                .bus_num                = 1,
                .chip_select            = 0,
                .max_speed_hz           = 24000000,
                .irq                    = ETH_KS8851_IRQ,
        },
};

static int omap_ethernet_init(void)
{
        int status;

        status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
        if (status < 0) {
                pr_warning("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
                return status;
        }

        status = gpio_request(ETH_KS8851_QUART, "quart");
        if (status < 0) {
                pr_warning("Cannot request GPIO %d\n", ETH_KS8851_QUART);
                goto err1;
        }

        status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
        if (status < 0) {
                pr_warning("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
                goto err2;
        }

        gpio_direction_output(ETH_KS8851_POWER_ON, 1);
        gpio_direction_output(ETH_KS8851_QUART, 1);
        gpio_direction_input(ETH_KS8851_IRQ);

        return status;

err2:
        gpio_free(ETH_KS8851_QUART);
err1:
        gpio_free(ETH_KS8851_POWER_ON);
        return status;

}


[...]


        /* FIXME: allow multi-omap to boot until musb is updated for omap4 */
        if (!cpu_is_omap44xx())
                usb_musb_init(&musb_board_data);

        status = omap_ethernet_init();
        if (status)
                pr_warning("Ethernet initialization failed: %d\n", status);
        else
                sdp4430_spi_board_info[0].irq = gpio_to_irq(ETH_KS8851_IRQ);

        spi_register_board_info(sdp4430_spi_board_info,
                        ARRAY_SIZE(sdp4430_spi_board_info));


Best Regards
Abraham
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to