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