|
@@ -312,3 +312,105 @@ static struct tvp514x_platform_data tvp5146_pdata = {
|
|
.hs_polarity = 1,
|
|
.hs_polarity = 1,
|
|
.vs_polarity = 1
|
|
.vs_polarity = 1
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
|
|
|
|
+/* Inputs available at the TVP5146 */
|
|
|
|
+static struct v4l2_input tvp5146_inputs[] = {
|
|
|
|
+ {
|
|
|
|
+ .index = 0,
|
|
|
|
+ .name = "Composite",
|
|
|
|
+ .type = V4L2_INPUT_TYPE_CAMERA,
|
|
|
|
+ .std = TVP514X_STD_ALL,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .index = 1,
|
|
|
|
+ .name = "S-Video",
|
|
|
|
+ .type = V4L2_INPUT_TYPE_CAMERA,
|
|
|
|
+ .std = TVP514X_STD_ALL,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * this is the route info for connecting each input to decoder
|
|
|
|
+ * ouput that goes to vpfe. There is a one to one correspondence
|
|
|
|
+ * with tvp5146_inputs
|
|
|
|
+ */
|
|
|
|
+static struct vpfe_route tvp5146_routes[] = {
|
|
|
|
+ {
|
|
|
|
+ .input = INPUT_CVBS_VI2B,
|
|
|
|
+ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
|
|
|
|
+ },
|
|
|
|
+{
|
|
|
|
+ .input = INPUT_SVIDEO_VI2C_VI1C,
|
|
|
|
+ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct vpfe_subdev_info vpfe_sub_devs[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "tvp5146",
|
|
|
|
+ .grp_id = 0,
|
|
|
|
+ .num_inputs = ARRAY_SIZE(tvp5146_inputs),
|
|
|
|
+ .inputs = tvp5146_inputs,
|
|
|
|
+ .routes = tvp5146_routes,
|
|
|
|
+ .can_route = 1,
|
|
|
|
+ .ccdc_if_params = {
|
|
|
|
+ .if_type = VPFE_BT656,
|
|
|
|
+ .hdpol = VPFE_PINPOL_POSITIVE,
|
|
|
|
+ .vdpol = VPFE_PINPOL_POSITIVE,
|
|
|
|
+ },
|
|
|
|
+ .board_info = {
|
|
|
|
+ I2C_BOARD_INFO("tvp5146", 0x5d),
|
|
|
|
+ .platform_data = &tvp5146_pdata,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct vpfe_config vpfe_cfg = {
|
|
|
|
+ .num_subdevs = ARRAY_SIZE(vpfe_sub_devs),
|
|
|
|
+ .sub_devs = vpfe_sub_devs,
|
|
|
|
+ .i2c_adapter_id = 1,
|
|
|
|
+ .card_name = "DM365 EVM",
|
|
|
|
+ .ccdc = "ISIF",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init evm_init_i2c(void)
|
|
|
|
+{
|
|
|
|
+ davinci_init_i2c(&i2c_pdata);
|
|
|
|
+ i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct platform_device *dm365_evm_nand_devices[] __initdata = {
|
|
|
|
+ &davinci_nand_device,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static inline int have_leds(void)
|
|
|
|
+{
|
|
|
|
+#ifdef CONFIG_LEDS_CLASS
|
|
|
|
+ return 1;
|
|
|
|
+#else
|
|
|
|
+ return 0;
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+struct cpld_led {
|
|
|
|
+ struct led_classdev cdev;
|
|
|
|
+ u8 mask;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct {
|
|
|
|
+ const char *name;
|
|
|
|
+ const char *trigger;
|
|
|
|
+} cpld_leds[] = {
|
|
|
|
+ { "dm365evm::ds2", },
|
|
|
|
+ { "dm365evm::ds3", },
|
|
|
|
+ { "dm365evm::ds4", },
|
|
|
|
+ { "dm365evm::ds5", },
|
|
|
|
+ { "dm365evm::ds6", "nand-disk", },
|
|
|
|
+ { "dm365evm::ds7", "mmc1", },
|
|
|
|
+ { "dm365evm::ds8", "mmc0", },
|
|
|
|
+ { "dm365evm::ds9", "heartbeat", },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void cpld_led_set(struct led_classdev *cdev, enum led_brightness b)
|
|
|
|
+{
|