#ifndef ARCH_ARM_PLAT_OMAP4_ISS_H #define ARCH_ARM_PLAT_OMAP4_ISS_H #include <linux/i2c.h> struct iss_device; enum iss_interface_type { ISS_INTERFACE_CSI2A_PHY1, ISS_INTERFACE_CSI2B_PHY2, }; /** * struct iss_csiphy_lane: CSI2 lane position and polarity * @pos: position of the lane * @pol: polarity of the lane */ struct iss_csiphy_lane { u8 pos; u8 pol; }; #define ISS_CSIPHY1_NUM_DATA_LANES 4 #define ISS_CSIPHY2_NUM_DATA_LANES 1 /** * struct iss_csiphy_lanes_cfg - CSI2 lane configuration * @data: Configuration of one or two data lanes * @clk: Clock lane configuration */ struct iss_csiphy_lanes_cfg { struct iss_csiphy_lane data[ISS_CSIPHY1_NUM_DATA_LANES]; struct iss_csiphy_lane clk; }; /** * struct iss_csi2_platform_data - CSI2 interface platform data * @crc: Enable the cyclic redundancy check * @vpclk_div: Video port output clock control */ struct iss_csi2_platform_data { unsigned crc:1; unsigned vpclk_div:2; struct iss_csiphy_lanes_cfg lanecfg; }; struct iss_subdev_i2c_board_info { struct i2c_board_info *board_info; int i2c_adapter_id; }; struct iss_v4l2_subdevs_group { struct iss_subdev_i2c_board_info *subdevs; enum iss_interface_type interface; union { struct iss_csi2_platform_data csi2; } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */ }; struct iss_platform_data { struct iss_v4l2_subdevs_group *subdevs; void (*set_constraints)(struct iss_device *iss, bool enable); }; #endif