| #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 |