summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojciech Bieganski <wbieganski@antmicro.com>2017-01-30 15:42:36 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-04-04 13:44:47 +0200
commiteb6ceee5ed319d72bb98cdc4cda4685199e30d9a (patch)
treef4f1763beb89721e8a5751322f79296232bd4374
parent8d9c2867df5fe6f5a54fe90b19ff2bfd325b3288 (diff)
media: three csi2 inputs: tc378743 (csia/b), adv7280m (csie)
Signed-off-by: Wojciech Bieganski <wbieganski@antmicro.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--arch/arm/mach-tegra/board-apalis-tk1-sensors.c96
-rw-r--r--drivers/media/i2c/soc_camera/adv7280.c11
2 files changed, 59 insertions, 48 deletions
diff --git a/arch/arm/mach-tegra/board-apalis-tk1-sensors.c b/arch/arm/mach-tegra/board-apalis-tk1-sensors.c
index 36894271092d..8f511bf45bbb 100644
--- a/arch/arm/mach-tegra/board-apalis-tk1-sensors.c
+++ b/arch/arm/mach-tegra/board-apalis-tk1-sensors.c
@@ -348,7 +348,7 @@ static struct platform_device apalis_tk1_ov5640_soc_camera_device = {
#endif
#if IS_ENABLED(CONFIG_SOC_CAMERA_TC358743)
-static int apalis_tk1_tc358743_power(struct device *dev, int enable)
+static int apalis_tk1_tc358743_power_a(struct device *dev, int enable)
{
if(enable) {
tegra_io_dpd_disable(&csia_io);
@@ -358,11 +358,11 @@ static int apalis_tk1_tc358743_power(struct device *dev, int enable)
return 0;
}
-static struct i2c_board_info apalis_tk1_tc358743_camera_i2c_device = {
+static struct i2c_board_info apalis_tk1_tc358743_camera_i2c_device_a = {
I2C_BOARD_INFO("tc358743", 0x0f),
};
-static struct tegra_camera_platform_data apalis_tk1_tc358743_camera_platform_data = {
+static struct tegra_camera_platform_data apalis_tk1_tc358743_camera_platform_data_a = {
.flip_v = 0,
.flip_h = 0,
.port = TEGRA_CAMERA_PORT_CSI_A,
@@ -370,71 +370,81 @@ static struct tegra_camera_platform_data apalis_tk1_tc358743_camera_platform_dat
.continuous_clk = 1,
};
-static struct soc_camera_link tc358743_iclink = {
+static struct soc_camera_link tc358743_iclink_a = {
.bus_id = 0, /* This must match the .id of tegra_vi01_device */
- .board_info = &apalis_tk1_tc358743_camera_i2c_device,
+ .board_info = &apalis_tk1_tc358743_camera_i2c_device_a,
.module_name = "tc358743",
- .i2c_adapter_id = 2, /* change to 1 if you have auvidea's B100 HDMI to CSI-2 Bridge */
- .power = apalis_tk1_tc358743_power,
- .priv = &apalis_tk1_tc358743_camera_platform_data,
+ .i2c_adapter_id = 2,
+ .power = apalis_tk1_tc358743_power_a,
+ .priv = &apalis_tk1_tc358743_camera_platform_data_a,
};
-static struct platform_device apalis_tk1_tc358743_soc_camera_device = {
+static struct platform_device apalis_tk1_tc358743_soc_camera_device_a = {
.name = "soc-camera-pdrv",
.id = 6,
.dev = {
- .platform_data = &tc358743_iclink,
+ .platform_data = &tc358743_iclink_a,
},
};
-#endif
-#if IS_ENABLED(CONFIG_SOC_CAMERA_ADV7280)
-static int apalis_tk1_adv7280_power(struct device *dev, int enable)
+/* second tc358743 */
+static int apalis_tk1_tc358743_power_b(struct device *dev, int enable)
{
if(enable) {
- tegra_io_dpd_disable(&csie_io);
+ tegra_io_dpd_disable(&csib_io);
} else {
- tegra_io_dpd_enable(&csie_io);
+ tegra_io_dpd_enable(&csib_io);
}
return 0;
}
-
-static struct i2c_board_info apalis_tk1_adv7280_camera_i2c_device_a = {
- I2C_BOARD_INFO("adv7280", 0x20),
+static struct i2c_board_info apalis_tk1_tc358743_camera_i2c_device_b = {
+ I2C_BOARD_INFO("tc358743", 0x0f),
};
-static struct tegra_camera_platform_data apalis_tk1_adv7280_camera_platform_data_a = {
+static struct tegra_camera_platform_data apalis_tk1_tc358743_camera_platform_data_b = {
.flip_v = 0,
.flip_h = 0,
- .port = TEGRA_CAMERA_PORT_CSI_A,
- .lanes = 1,
- .continuous_clk = 0,
+ .port = TEGRA_CAMERA_PORT_CSI_B,
+ .lanes = 2,
+ .continuous_clk = 1,
};
-static struct soc_camera_link adv7280_iclink_a = {
+static struct soc_camera_link tc358743_iclink_b = {
.bus_id = 0, /* This must match the .id of tegra_vi01_device */
- .board_info = &apalis_tk1_adv7280_camera_i2c_device_a,
- .module_name = "adv7280",
- .i2c_adapter_id = 2,
- .power = apalis_tk1_adv7280_power,
- .priv = &apalis_tk1_adv7280_camera_platform_data_a,
+ .board_info = &apalis_tk1_tc358743_camera_i2c_device_b,
+ .module_name = "tc358743",
+ .i2c_adapter_id = 0,
+ .power = apalis_tk1_tc358743_power_b,
+ .priv = &apalis_tk1_tc358743_camera_platform_data_b,
};
-static struct platform_device apalis_tk1_adv7280_soc_camera_device_a = {
+static struct platform_device apalis_tk1_tc358743_soc_camera_device_b = {
.name = "soc-camera-pdrv",
.id = 7,
.dev = {
- .platform_data = &adv7280_iclink_a,
+ .platform_data = &tc358743_iclink_b,
},
};
+#endif
-/* second ADV7280M connected to CSI CIL-E */
-static struct i2c_board_info apalis_tk1_adv7280_camera_i2c_device_b = {
- I2C_BOARD_INFO("adv7280", 0x21),
+#if IS_ENABLED(CONFIG_SOC_CAMERA_ADV7280)
+/* ADV7280M CSI C */
+static int apalis_tk1_adv7280_power_c(struct device *dev, int enable)
+{
+ if(enable) {
+ tegra_io_dpd_disable(&csie_io);
+ } else {
+ tegra_io_dpd_enable(&csie_io);
+ }
+ return 0;
+}
+
+static struct i2c_board_info apalis_tk1_adv7280_camera_i2c_device_c = {
+ I2C_BOARD_INFO("adv7280", 0x20),
};
-static struct tegra_camera_platform_data apalis_tk1_adv7280_camera_platform_data_b = {
+static struct tegra_camera_platform_data apalis_tk1_adv7280_camera_platform_data_c = {
.flip_v = 0,
.flip_h = 0,
.port = TEGRA_CAMERA_PORT_CSI_C,
@@ -442,20 +452,20 @@ static struct tegra_camera_platform_data apalis_tk1_adv7280_camera_platform_data
.continuous_clk = 0,
};
-static struct soc_camera_link adv7280_iclink_b = {
+static struct soc_camera_link adv7280_iclink_c = {
.bus_id = 0, /* This must match the .id of tegra_vi01_device */
- .board_info = &apalis_tk1_adv7280_camera_i2c_device_b,
+ .board_info = &apalis_tk1_adv7280_camera_i2c_device_c,
.module_name = "adv7280",
.i2c_adapter_id = 2,
- .power = apalis_tk1_adv7280_power,
- .priv = &apalis_tk1_adv7280_camera_platform_data_b,
+ .power = apalis_tk1_adv7280_power_c,
+ .priv = &apalis_tk1_adv7280_camera_platform_data_c,
};
-static struct platform_device apalis_tk1_adv7280_soc_camera_device_b = {
+static struct platform_device apalis_tk1_adv7280_soc_camera_device_c = {
.name = "soc-camera-pdrv",
.id = 8,
.dev = {
- .platform_data = &adv7280_iclink_b,
+ .platform_data = &adv7280_iclink_c,
},
};
#endif
@@ -1676,12 +1686,12 @@ static int apalis_tk1_camera_init(void)
#endif
#if IS_ENABLED(CONFIG_SOC_CAMERA_TC358743)
- platform_device_register(&apalis_tk1_tc358743_soc_camera_device);
+ platform_device_register(&apalis_tk1_tc358743_soc_camera_device_a);
+ platform_device_register(&apalis_tk1_tc358743_soc_camera_device_b);
#endif
#if IS_ENABLED(CONFIG_SOC_CAMERA_ADV7280)
- platform_device_register(&apalis_tk1_adv7280_soc_camera_device_a);
- platform_device_register(&apalis_tk1_adv7280_soc_camera_device_b);
+ platform_device_register(&apalis_tk1_adv7280_soc_camera_device_c);
#endif
return 0;
diff --git a/drivers/media/i2c/soc_camera/adv7280.c b/drivers/media/i2c/soc_camera/adv7280.c
index 0cafa2d9961c..d5e7391b6b75 100644
--- a/drivers/media/i2c/soc_camera/adv7280.c
+++ b/drivers/media/i2c/soc_camera/adv7280.c
@@ -1,5 +1,5 @@
/*
- * ADV7280 camera decoder driver, based on ADV7280 driver
+ * ADV7280 camera decoder driver, based on ADV7180 driver
*
* Copyright (c) 2014 Antmicro Ltd <www.antmicro.com>
* Based on ADV7180 video decoder driver,
@@ -317,7 +317,7 @@ static int adv7280_s_fmt(struct v4l2_subdev *sd,
switch (code) {
case V4L2_MBUS_FMT_UYVY8_2X8:
- cspace = V4L2_COLORSPACE_SRGB;
+ cspace = V4L2_COLORSPACE_SMPTE170M;
break;
default:
return -EINVAL;
@@ -338,10 +338,10 @@ static int adv7280_try_fmt(struct v4l2_subdev *sd,
mf->field = V4L2_FIELD_INTERLACED_TB;
#endif
mf->code = V4L2_MBUS_FMT_UYVY8_2X8;
- mf->colorspace = V4L2_COLORSPACE_SRGB;
+ mf->colorspace = V4L2_COLORSPACE_SMPTE170M;
- // PAL
- mf->width = 640;
+ /* PAL, line aligned to 64B */
+ mf->width = 736;
mf->height = 576;
return 0;
@@ -831,3 +831,4 @@ module_exit(adv7280_exit);
MODULE_DESCRIPTION("Analog Devices ADV7280/ADV7280-M video decoder driver");
MODULE_AUTHOR("Wojciech Bieganski <wbieganski@antmicro.com>");
MODULE_LICENSE("GPL v2");
+