1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef ARCH_ARM_PLAT_OMAP4_ISS_H 3 #define ARCH_ARM_PLAT_OMAP4_ISS_H 4 5 #include <linux/i2c.h> 6 7 struct iss_device; 8 9 enum iss_interface_type { 10 ISS_INTERFACE_CSI2A_PHY1, 11 ISS_INTERFACE_CSI2B_PHY2, 12 }; 13 14 /** 15 * struct iss_csiphy_lane: CSI2 lane position and polarity 16 * @pos: position of the lane 17 * @pol: polarity of the lane 18 */ 19 struct iss_csiphy_lane { 20 u8 pos; 21 u8 pol; 22 }; 23 24 #define ISS_CSIPHY1_NUM_DATA_LANES 4 25 #define ISS_CSIPHY2_NUM_DATA_LANES 1 26 27 /** 28 * struct iss_csiphy_lanes_cfg - CSI2 lane configuration 29 * @data: Configuration of one or two data lanes 30 * @clk: Clock lane configuration 31 */ 32 struct iss_csiphy_lanes_cfg { 33 struct iss_csiphy_lane data[ISS_CSIPHY1_NUM_DATA_LANES]; 34 struct iss_csiphy_lane clk; 35 }; 36 37 /** 38 * struct iss_csi2_platform_data - CSI2 interface platform data 39 * @crc: Enable the cyclic redundancy check 40 * @vpclk_div: Video port output clock control 41 */ 42 struct iss_csi2_platform_data { 43 unsigned crc:1; 44 unsigned vpclk_div:2; 45 struct iss_csiphy_lanes_cfg lanecfg; 46 }; 47 48 struct iss_subdev_i2c_board_info { 49 struct i2c_board_info *board_info; 50 int i2c_adapter_id; 51 }; 52 53 struct iss_v4l2_subdevs_group { 54 struct iss_subdev_i2c_board_info *subdevs; 55 enum iss_interface_type interface; 56 union { 57 struct iss_csi2_platform_data csi2; 58 } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */ 59 }; 60 61 struct iss_platform_data { 62 struct iss_v4l2_subdevs_group *subdevs; 63 void (*set_constraints)(struct iss_device *iss, bool enable); 64 }; 65 66 #endif 67