Commit | Line | Data |
---|---|---|
b8d9834a SN |
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 | ||
1bc515ac SN |
80 | static inline |
81 | struct 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 | ||
b8d9834a SN |
86 | int fimc_is_register_sensor_driver(void); |
87 | void fimc_is_unregister_sensor_driver(void); | |
88 | ||
89 | #endif /* FIMC_IS_SENSOR_H_ */ |