Re: [PATCH 4/4] mt9v022: allow setting of bus width from board code
On Wed, 11 Mar 2009, Sascha Hauer wrote: This patch removes the phytec specific setting of the bus width and switches to the more generic query_bus_param/set_bus_param hooks Signed-off-by: Sascha Hauer s.ha...@pengutronix.de --- drivers/media/video/Kconfig |7 --- drivers/media/video/mt9v022.c | 97 + 2 files changed, 11 insertions(+), 93 deletions(-) diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index 5fc1531..071d66f 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig @@ -747,13 +747,6 @@ config SOC_CAMERA_MT9V022 help This driver supports MT9V022 cameras from Micron -config MT9V022_PCA9536_SWITCH - bool pca9536 datawidth switch for mt9v022 - depends on SOC_CAMERA_MT9V022 GENERIC_GPIO - help - Select this if your MT9V022 camera uses a PCA9536 I2C GPIO - extender to switch between 8 and 10 bit datawidth modes - config SOC_CAMERA_TW9910 tristate tw9910 support depends on SOC_CAMERA I2C diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c index b04c8cb..26f97eb 100644 --- a/drivers/media/video/mt9v022.c +++ b/drivers/media/video/mt9v022.c @@ -209,66 +209,6 @@ static int mt9v022_stop_capture(struct soc_camera_device *icd) return 0; } -static int bus_switch_request(struct mt9v022 *mt9v022, struct soc_camera_link *icl) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - int ret; - unsigned int gpio = icl-gpio; - - if (gpio_is_valid(gpio)) { - /* We have a data bus switch. */ - ret = gpio_request(gpio, mt9v022); - if (ret 0) { - dev_err(mt9v022-client-dev, Cannot get GPIO %u\n, gpio); - return ret; - } - - ret = gpio_direction_output(gpio, 0); - if (ret 0) { - dev_err(mt9v022-client-dev, - Cannot set GPIO %u to output\n, gpio); - gpio_free(gpio); - return ret; - } - } - - mt9v022-switch_gpio = gpio; -#else - mt9v022-switch_gpio = -EINVAL; -#endif - return 0; -} - -static void bus_switch_release(struct mt9v022 *mt9v022) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - if (gpio_is_valid(mt9v022-switch_gpio)) - gpio_free(mt9v022-switch_gpio); -#endif -} - -static int bus_switch_act(struct mt9v022 *mt9v022, int go8bit) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - if (!gpio_is_valid(mt9v022-switch_gpio)) - return -ENODEV; - - gpio_set_value_cansleep(mt9v022-switch_gpio, go8bit); - return 0; -#else - return -ENODEV; -#endif -} - -static int bus_switch_possible(struct mt9v022 *mt9v022) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - return gpio_is_valid(mt9v022-switch_gpio); -#else - return 0; -#endif -} - static int mt9v022_set_bus_param(struct soc_camera_device *icd, unsigned long flags) { @@ -282,19 +222,10 @@ static int mt9v022_set_bus_param(struct soc_camera_device *icd, if (!is_power_of_2(width_flag)) return -EINVAL; - if ((mt9v022-datawidth != 10 (width_flag == SOCAM_DATAWIDTH_10)) || - (mt9v022-datawidth != 9 (width_flag == SOCAM_DATAWIDTH_9)) || - (mt9v022-datawidth != 8 (width_flag == SOCAM_DATAWIDTH_8))) { - /* Well, we actually only can do 10 or 8 bits... */ - if (width_flag == SOCAM_DATAWIDTH_9) - return -EINVAL; - - ret = bus_switch_act(mt9v022, - width_flag == SOCAM_DATAWIDTH_8); - if (ret 0) + if (icl-set_bus_param) { + ret = icl-set_bus_param(mt9v022-client-dev, width_flag); + if (ret) return ret; - - mt9v022-datawidth = width_flag == SOCAM_DATAWIDTH_8 ? 8 : 10; } flags = soc_camera_apply_sensor_flags(icl, flags); @@ -328,10 +259,14 @@ static int mt9v022_set_bus_param(struct soc_camera_device *icd, static unsigned long mt9v022_query_bus_param(struct soc_camera_device *icd) { struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); - unsigned int width_flag = SOCAM_DATAWIDTH_10; + struct soc_camera_link *icl = mt9v022-client-dev.platform_data; + unsigned int width_flag; - if (bus_switch_possible(mt9v022)) - width_flag |= SOCAM_DATAWIDTH_8; + if (icl-query_bus_param) + width_flag = icl-query_bus_param(mt9v022-client-dev) + SOCAM_DATAWIDTH_MASK; + else + width_flag = SOCAM_DATAWIDTH_10; return SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING | SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW | @@ -729,6 +664,7 @@ static int
[PATCH 4/4] mt9v022: allow setting of bus width from board code
This patch removes the phytec specific setting of the bus width and switches to the more generic query_bus_param/set_bus_param hooks Signed-off-by: Sascha Hauer s.ha...@pengutronix.de --- drivers/media/video/Kconfig |7 --- drivers/media/video/mt9v022.c | 97 + 2 files changed, 11 insertions(+), 93 deletions(-) diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index 5fc1531..071d66f 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig @@ -747,13 +747,6 @@ config SOC_CAMERA_MT9V022 help This driver supports MT9V022 cameras from Micron -config MT9V022_PCA9536_SWITCH - bool pca9536 datawidth switch for mt9v022 - depends on SOC_CAMERA_MT9V022 GENERIC_GPIO - help - Select this if your MT9V022 camera uses a PCA9536 I2C GPIO - extender to switch between 8 and 10 bit datawidth modes - config SOC_CAMERA_TW9910 tristate tw9910 support depends on SOC_CAMERA I2C diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c index b04c8cb..26f97eb 100644 --- a/drivers/media/video/mt9v022.c +++ b/drivers/media/video/mt9v022.c @@ -209,66 +209,6 @@ static int mt9v022_stop_capture(struct soc_camera_device *icd) return 0; } -static int bus_switch_request(struct mt9v022 *mt9v022, struct soc_camera_link *icl) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - int ret; - unsigned int gpio = icl-gpio; - - if (gpio_is_valid(gpio)) { - /* We have a data bus switch. */ - ret = gpio_request(gpio, mt9v022); - if (ret 0) { - dev_err(mt9v022-client-dev, Cannot get GPIO %u\n, gpio); - return ret; - } - - ret = gpio_direction_output(gpio, 0); - if (ret 0) { - dev_err(mt9v022-client-dev, - Cannot set GPIO %u to output\n, gpio); - gpio_free(gpio); - return ret; - } - } - - mt9v022-switch_gpio = gpio; -#else - mt9v022-switch_gpio = -EINVAL; -#endif - return 0; -} - -static void bus_switch_release(struct mt9v022 *mt9v022) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - if (gpio_is_valid(mt9v022-switch_gpio)) - gpio_free(mt9v022-switch_gpio); -#endif -} - -static int bus_switch_act(struct mt9v022 *mt9v022, int go8bit) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - if (!gpio_is_valid(mt9v022-switch_gpio)) - return -ENODEV; - - gpio_set_value_cansleep(mt9v022-switch_gpio, go8bit); - return 0; -#else - return -ENODEV; -#endif -} - -static int bus_switch_possible(struct mt9v022 *mt9v022) -{ -#ifdef CONFIG_MT9V022_PCA9536_SWITCH - return gpio_is_valid(mt9v022-switch_gpio); -#else - return 0; -#endif -} - static int mt9v022_set_bus_param(struct soc_camera_device *icd, unsigned long flags) { @@ -282,19 +222,10 @@ static int mt9v022_set_bus_param(struct soc_camera_device *icd, if (!is_power_of_2(width_flag)) return -EINVAL; - if ((mt9v022-datawidth != 10 (width_flag == SOCAM_DATAWIDTH_10)) || - (mt9v022-datawidth != 9 (width_flag == SOCAM_DATAWIDTH_9)) || - (mt9v022-datawidth != 8 (width_flag == SOCAM_DATAWIDTH_8))) { - /* Well, we actually only can do 10 or 8 bits... */ - if (width_flag == SOCAM_DATAWIDTH_9) - return -EINVAL; - - ret = bus_switch_act(mt9v022, -width_flag == SOCAM_DATAWIDTH_8); - if (ret 0) + if (icl-set_bus_param) { + ret = icl-set_bus_param(mt9v022-client-dev, width_flag); + if (ret) return ret; - - mt9v022-datawidth = width_flag == SOCAM_DATAWIDTH_8 ? 8 : 10; } flags = soc_camera_apply_sensor_flags(icl, flags); @@ -328,10 +259,14 @@ static int mt9v022_set_bus_param(struct soc_camera_device *icd, static unsigned long mt9v022_query_bus_param(struct soc_camera_device *icd) { struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd); - unsigned int width_flag = SOCAM_DATAWIDTH_10; + struct soc_camera_link *icl = mt9v022-client-dev.platform_data; + unsigned int width_flag; - if (bus_switch_possible(mt9v022)) - width_flag |= SOCAM_DATAWIDTH_8; + if (icl-query_bus_param) + width_flag = icl-query_bus_param(mt9v022-client-dev) + SOCAM_DATAWIDTH_MASK; + else + width_flag = SOCAM_DATAWIDTH_10; return SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING | SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW | @@ -729,6 +664,7 @@ static int mt9v022_video_probe(struct soc_camera_device *icd)
Re: [PATCH 4/4] mt9v022: allow setting of bus width from board code
This patch removes the phytec specific setting of the bus width and switches to the more generic query_bus_param/set_bus_param hooks Signed-off-by: Sascha Hauer s.ha...@pengutronix.de --- drivers/media/video/Kconfig |7 --- drivers/media/video/mt9v022.c | 97 + 2 files changed, 11 insertions(+), 93 deletions(-) diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index 5fc1531..071d66f 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig @@ -729,6 +664,7 @@ static int mt9v022_video_probe(struct soc_camera_device *icd) /* Set monochrome or colour sensor type */ if (sensor_type (!strcmp(colour, sensor_type) || !strcmp(color, sensor_type))) { + if (1) { ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 4 | 0x11); mt9v022-model = V4L2_IDENT_MT9V022IX7ATC; icd-formats = mt9v022_colour_formats; 'if (1) {': some left-over debugging? Regards, Hans -- Hans Verkuil - video4linux developer - sponsored by TANDBERG -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html