On Wednesday, February 02, 2011 12:55 AM, Mika Westerberg wrote:
quoted
/*************************************************************************
+ * EDB93xx SPI peripheral handling
+ *************************************************************************/
+static int edb93xx_cs4271_hw_setup(struct spi_device *spi)
+{
+ int gpio_nreset;
+ int err;
+
+ if (machine_is_edb9301() || machine_is_edb9302()) {
+ gpio_nreset = EP93XX_GPIO_LINE_EGPIO1;
+ } else if (machine_is_edb9302a() || machine_is_edb9307a()) {
+ ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_HONIDE);
+ gpio_nreset = EP93XX_GPIO_LINE_DD2;
+ } else if (machine_is_edb9315a()) {
+ gpio_nreset = EP93XX_GPIO_LINE_EGPIO14;
+ } else {
+ return -EINVAL;
+ }
+
+ err = gpio_request(gpio_nreset, spi->modalias);
+ if (err)
+ return err;
+ err = gpio_request(EP93XX_GPIO_LINE_EGPIO6, spi->modalias);
+ if (err)
Should you call gpio_free() for gpio_nreset here?
Yes. If the second gpio_request fails, the first gpio should be freed.
A cleaner way of handling the gpios would be to use gpio_request_array()
and remove the gpio knowledge from the codec driver completely.
Hartley