On Wednesday, February 02, 2011 6:27 AM, Alexander Sverdlin wrote:
I think we can leave reset management in CODEC (as it will be almost the same for all platforms), leave enable pin management in CODEC unused, but attach enable GPIO to spi_board_info in platform to enable other SPI devices on bus.
Hartley, in this case we cannot use existing cs4271_platform_data and have to leave long if-else statemens as is. Would it be ok?
Alexander,
Below is what I propose for the platform init code. This assumes that the reset gpio will still be handled by the codec since it's related to power management.
Regards, Hartley
static struct cs4271_platform_data edb93xx_cs4271_data = { .gpio_nreset = -EINVAL, /* filled in later */ };
static int edb93xx_cs4271_hw_setup(struct spi_device *spi) { return gpio_request_one(EP93XX_GPIO_LINE_EGPIO6, GPIOF_OUT_INIT_HIGH, spi->modalias); }
static void edb93xx_cs4271_hw_cleanup(struct spi_device *spi) { gpio_free(EP93XX_GPIO_LINE_EGPIO6); }
static void edb93xx_cs4271_hw_cs_control(struct spi_device *spi, int value) { gpio_set_value(EP93XX_GPIO_LINE_EGPIO6, value); }
static struct ep93xx_spi_chip_ops edb93xx_cs4721_hw = { .setup = edb93xx_cs4271_hw_setup, .cleanup = edb93xx_cs4271_hw_cleanup, .cs_control = edb93xx_cs4271_hw_cs_control, };
static struct spi_board_info edb93xx_spi_board_info[] __initdata = { { .modalias = "cs4271", .platform_data = &edb93xx_cs4271_data, .controller_data = &edb93xx_cs4721_hw, .max_speed_hz = 6000000, .bus_num = 0, .chip_select = 0, .mode = SPI_MODE_3, }, };
static struct ep93xx_spi_info edb93xx_spi_master __initdata = { .num_chipselect = ARRAY_SIZE(edb93xx_spi_board_info), };
static void __init edb93xx_register_spi(void) { if (machine_is_edb9301() || machine_is_edb9302()) { edb93xx_cs4271_data.gpio_nreset = EP93XX_GPIO_LINE_EGPIO1; } else if (machine_is_edb9302a() || machine_is_edb9307a()) { edb93xx_cs4271_data.gpio_nreset = EP93XX_GPIO_LINE_H(2); } else if (machine_is_edb9315a()) { edb93xx_cs4271_data.gpio_nreset = EP93XX_GPIO_LINE_EGPIO14; }
ep93xx_register_spi(&edb93xx_spi_master, edb93xx_spi_board_info, ARRAY_SIZE(edb93xx_spi_board_info)); }