1 /* 2 * Samsung EXYNOS4x12 FIMC-IS (Imaging Subsystem) driver 3 * 4 * Copyright (C) 2013 Samsung Electronics Co., Ltd. 5 * 6 * Authors: Sylwester Nawrocki <s.nawrocki@samsung.com> 7 * Younghwan Joo <yhwan.joo@samsung.com> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 #ifndef FIMC_IS_SENSOR_H_ 14 #define FIMC_IS_SENSOR_H_ 15 16 #include <linux/clk.h> 17 #include <linux/device.h> 18 #include <linux/kernel.h> 19 #include <linux/platform_device.h> 20 #include <linux/regulator/consumer.h> 21 #include <linux/videodev2.h> 22 #include <media/v4l2-subdev.h> 23 24 #define FIMC_IS_SENSOR_OPEN_TIMEOUT 2000 /* ms */ 25 26 #define FIMC_IS_SENSOR_DEF_PIX_WIDTH 1296 27 #define FIMC_IS_SENSOR_DEF_PIX_HEIGHT 732 28 29 #define S5K6A3_SENSOR_WIDTH 1392 30 #define S5K6A3_SENSOR_HEIGHT 1392 31 32 #define SENSOR_NUM_SUPPLIES 2 33 34 enum fimc_is_sensor_id { 35 FIMC_IS_SENSOR_ID_S5K3H2 = 1, 36 FIMC_IS_SENSOR_ID_S5K6A3, 37 FIMC_IS_SENSOR_ID_S5K4E5, 38 FIMC_IS_SENSOR_ID_S5K3H7, 39 FIMC_IS_SENSOR_ID_CUSTOM, 40 FIMC_IS_SENSOR_ID_END 41 }; 42 43 #define IS_SENSOR_CTRL_BUS_I2C0 0 44 #define IS_SENSOR_CTRL_BUS_I2C1 1 45 46 struct sensor_drv_data { 47 enum fimc_is_sensor_id id; 48 const char * const subdev_name; 49 unsigned int width; 50 unsigned int height; 51 }; 52 53 /** 54 * struct fimc_is_sensor - fimc-is sensor data structure 55 * @dev: pointer to this I2C client device structure 56 * @subdev: the image sensor's v4l2 subdev 57 * @pad: subdev media source pad 58 * @supplies: image sensor's voltage regulator supplies 59 * @gpio_reset: GPIO connected to the sensor's reset pin 60 * @drvdata: a pointer to the sensor's parameters data structure 61 * @i2c_bus: ISP I2C bus index (0...1) 62 * @test_pattern: true to enable video test pattern 63 * @lock: mutex protecting the structure's members below 64 * @format: media bus format at the sensor's source pad 65 */ 66 struct fimc_is_sensor { 67 struct device *dev; 68 struct v4l2_subdev subdev; 69 struct media_pad pad; 70 struct regulator_bulk_data supplies[SENSOR_NUM_SUPPLIES]; 71 int gpio_reset; 72 const struct sensor_drv_data *drvdata; 73 unsigned int i2c_bus; 74 bool test_pattern; 75 76 struct mutex lock; 77 struct v4l2_mbus_framefmt format; 78 }; 79 80 static inline sd_to_fimc_is_sensor(struct v4l2_subdev * sd)81struct fimc_is_sensor *sd_to_fimc_is_sensor(struct v4l2_subdev *sd) 82 { 83 return container_of(sd, struct fimc_is_sensor, subdev); 84 } 85 86 int fimc_is_register_sensor_driver(void); 87 void fimc_is_unregister_sensor_driver(void); 88 89 #endif /* FIMC_IS_SENSOR_H_ */ 90