2 * Samsung EXYNOS4x12 FIMC-IS (Imaging Subsystem) driver
4 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6 * Authors: Sylwester Nawrocki <s.nawrocki@samsung.com>
7 * Younghwan Joo <yhwan.joo@samsung.com>
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.
13 #ifndef FIMC_IS_SENSOR_H_
14 #define FIMC_IS_SENSOR_H_
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>
24 #define FIMC_IS_SENSOR_OPEN_TIMEOUT 2000 /* ms */
26 #define FIMC_IS_SENSOR_DEF_PIX_WIDTH 1296
27 #define FIMC_IS_SENSOR_DEF_PIX_HEIGHT 732
29 #define S5K6A3_SENSOR_WIDTH 1392
30 #define S5K6A3_SENSOR_HEIGHT 1392
32 #define SENSOR_NUM_SUPPLIES 2
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
,
43 #define IS_SENSOR_CTRL_BUS_I2C0 0
44 #define IS_SENSOR_CTRL_BUS_I2C1 1
46 struct sensor_drv_data
{
47 enum fimc_is_sensor_id id
;
48 const char * const subdev_name
;
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
66 struct fimc_is_sensor
{
68 struct v4l2_subdev subdev
;
70 struct regulator_bulk_data supplies
[SENSOR_NUM_SUPPLIES
];
72 const struct sensor_drv_data
*drvdata
;
77 struct v4l2_mbus_framefmt format
;
81 struct fimc_is_sensor
*sd_to_fimc_is_sensor(struct v4l2_subdev
*sd
)
83 return container_of(sd
, struct fimc_is_sensor
, subdev
);
86 int fimc_is_register_sensor_driver(void);
87 void fimc_is_unregister_sensor_driver(void);
89 #endif /* FIMC_IS_SENSOR_H_ */