• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)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 
86 int fimc_is_register_sensor_driver(void);
87 void fimc_is_unregister_sensor_driver(void);
88 
89 #endif /* FIMC_IS_SENSOR_H_ */
90