summaryrefslogtreecommitdiff
path: root/drivers/media/video/wmt_v4l2/sensors/gc2015
diff options
context:
space:
mode:
authorSrikant Patnaik2015-01-11 12:28:04 +0530
committerSrikant Patnaik2015-01-11 12:28:04 +0530
commit871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch)
tree8718f573808810c2a1e8cb8fb6ac469093ca2784 /drivers/media/video/wmt_v4l2/sensors/gc2015
parent9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff)
downloadFOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized. Changes are basically to make it look like kernel structure.
Diffstat (limited to 'drivers/media/video/wmt_v4l2/sensors/gc2015')
-rwxr-xr-xdrivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.c225
-rwxr-xr-xdrivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.h601
2 files changed, 826 insertions, 0 deletions
diff --git a/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.c b/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.c
new file mode 100755
index 00000000..fb0d5351
--- /dev/null
+++ b/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.c
@@ -0,0 +1,225 @@
+
+#include "../cmos-subdev.h"
+#include "../../wmt-vid.h"
+#include "gc2015.h"
+
+#define sensor_write_array(sd, arr, sz) \
+ cmos_init_8bit_addr(arr, sz, (sd)->i2c_addr)
+
+#define sensor_read(sd, reg) \
+ wmt_vid_i2c_read(sd->i2c_addr, reg)
+
+#define sensor_write(sd, reg, val) \
+ wmt_vid_i2c_write(sd->i2c_addr, reg, val)
+
+struct cmos_win_size {
+ char *name;
+ int width;
+ int height;
+ uint8_t *regs;
+ size_t size;
+};
+
+#define CMOS_WIN_SIZE(n, w, h, r) \
+ {.name = n, .width = w , .height = h, .regs = r, .size = ARRAY_SIZE(r) }
+
+static const struct cmos_win_size cmos_supported_win_sizes[] = {
+ CMOS_WIN_SIZE("QVGA", 320, 240, gc2015_320x240),
+ CMOS_WIN_SIZE("VGA", 640, 480, gc2015_640x480),
+ CMOS_WIN_SIZE("UXGA", 1600, 1200, gc2015_1600x1200),
+};
+
+static const struct cmos_win_size *cmos_select_win(u32 *width, u32 *height)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(cmos_supported_win_sizes); i++) {
+ if (cmos_supported_win_sizes[i].width == *width &&
+ cmos_supported_win_sizes[i].height == *height) {
+ *width = cmos_supported_win_sizes[i].width;
+ *height = cmos_supported_win_sizes[i].height;
+ return &cmos_supported_win_sizes[i];
+ }
+ }
+ return NULL;
+}
+
+static int sensor_s_hflip(struct cmos_subdev *sd, int value)
+{
+ int data;
+
+ data = sensor_read(sd, 0x14);
+
+ switch (value) {
+ case 0:
+ data &= ~0x01;
+ break;
+ case 1:
+ data |= 0x01;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return sensor_write(sd, 0x14, data);
+}
+
+static int sensor_s_vflip(struct cmos_subdev *sd, int value)
+{
+ int data;
+
+ data = sensor_read(sd, 0x14);
+
+ switch (value) {
+ case 0:
+ data &= ~0x02;
+ break;
+ case 1:
+ data |= 0x02;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return sensor_write(sd, 0x14, data);
+}
+
+static int sensor_s_wb(struct cmos_subdev *sd, enum v4l2_wb_mode value)
+{
+ uint8_t *regs;
+ size_t size;
+
+ switch (value) {
+ case WHITE_BALANCE_AUTO:
+ regs = gc2015_wb_auto;
+ size = ARRAY_SIZE(gc2015_wb_auto);
+ break;
+ case WHITE_BALANCE_INCANDESCENCE:
+ regs = gc2015_wb_incandescent;
+ size = ARRAY_SIZE(gc2015_wb_incandescent);
+ break;
+ case WHITE_BALANCE_DAYLIGHT:
+ regs = gc2015_wb_daylight;
+ size = ARRAY_SIZE(gc2015_wb_daylight);
+ break;
+ case WHITE_BALANCE_CLOUDY:
+ regs = gc2015_wb_cloudy;
+ size = ARRAY_SIZE(gc2015_wb_cloudy);
+ break;
+ case WHITE_BALANCE_FLUORESCENT:
+ regs = gc2015_wb_fluorescent;
+ size = ARRAY_SIZE(gc2015_wb_fluorescent);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ sensor_write_array(sd, regs, size);
+ return 0;
+}
+
+static int sensor_queryctrl(struct cmos_subdev *sd, struct v4l2_queryctrl *qc)
+{
+ switch (qc->id) {
+ case V4L2_CID_VFLIP:
+ case V4L2_CID_HFLIP:
+ return v4l2_ctrl_query_fill(qc, 0, 1, 1, 0);
+ case V4L2_CID_DO_WHITE_BALANCE:
+ return v4l2_ctrl_query_fill(qc, 0, 3, 1, 0);
+ }
+ return -EINVAL;
+}
+
+static int sensor_s_ctrl(struct cmos_subdev *sd, struct v4l2_control *ctrl)
+{
+ switch (ctrl->id) {
+ case V4L2_CID_VFLIP:
+ return sensor_s_vflip(sd, ctrl->value);
+ case V4L2_CID_HFLIP:
+ return sensor_s_hflip(sd, ctrl->value);
+ case V4L2_CID_DO_WHITE_BALANCE:
+ return sensor_s_wb(sd, ctrl->value);
+ }
+ return -EINVAL;
+}
+
+static int sensor_g_mbus_fmt(struct cmos_subdev *sd,
+ struct v4l2_mbus_framefmt *mf)
+{
+ return -EINVAL;
+}
+
+static int sensor_s_mbus_fmt(struct cmos_subdev *sd,
+ struct v4l2_mbus_framefmt *mf)
+{
+ const struct cmos_win_size *win;
+
+ win = cmos_select_win(&mf->width, &mf->height);
+ if (!win)
+ return -EINVAL;
+
+ sensor_write_array(sd, win->regs, win->size);
+ return 0;
+}
+
+static int sensor_try_mbus_fmt(struct cmos_subdev *sd,
+ struct v4l2_mbus_framefmt *mf)
+{
+ return 0;
+}
+
+static int sensor_identify(struct cmos_subdev *sd)
+{
+ return (sensor_read(sd, 0) == sd->id) ? 0 : -EINVAL;
+}
+
+static int sensor_init(struct cmos_subdev *sd)
+{
+ if (!sensor_identify(sd)) {
+ return -1;
+ }
+
+ sensor_write_array(sd, gc2015_default_regs_init,
+ ARRAY_SIZE(gc2015_default_regs_init));
+ return 0;
+}
+
+static int sensor_exit(struct cmos_subdev *sd)
+{
+ return 0;
+}
+
+static struct cmos_subdev_ops gc2015_ops = {
+ .identify = sensor_identify,
+ .init = sensor_init,
+ .exit = sensor_exit,
+ .queryctrl = sensor_queryctrl,
+ .s_ctrl = sensor_s_ctrl,
+ .s_mbus_fmt = sensor_s_mbus_fmt,
+ .g_mbus_fmt = sensor_g_mbus_fmt,
+ .try_mbus_fmt = sensor_try_mbus_fmt,
+};
+
+struct cmos_subdev gc2015 = {
+ .name = "gc2015",
+ .i2c_addr = 0x30,
+ .id = 0x2005,
+ .max_width = 1600,
+ .max_height = 1200,
+ .ops = &gc2015_ops,
+};
+
+static int __init gc2015_init(void)
+{
+ return cmos_register_sudbdev(&gc2015);
+}
+
+static void __exit gc2015_exit(void)
+{
+ return cmos_unregister_subdev(&gc2015);
+}
+
+module_init(gc2015_init);
+module_exit(gc2015_exit);
+
+MODULE_LICENSE("GPL");
diff --git a/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.h b/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.h
new file mode 100755
index 00000000..78016867
--- /dev/null
+++ b/drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.h
@@ -0,0 +1,601 @@
+#ifndef GC2015_H
+#define GC2015_H
+
+
+// Scene Mode
+uint8_t gc2015_scene_mode_auto[] = {
+};
+
+uint8_t gc2015_scene_mode_night[] = {
+};
+
+
+// White Balance
+uint8_t gc2015_wb_auto [] = {
+};
+
+uint8_t gc2015_wb_incandescent [] = {
+};
+
+uint8_t gc2015_wb_fluorescent [] = {
+};
+
+uint8_t gc2015_wb_daylight [] = {
+};
+
+uint8_t gc2015_wb_cloudy [] = {
+};
+
+uint8_t gc2015_wb_tungsten [] = {
+};
+
+
+// Exposure
+uint8_t gc2015_exposure_neg6[] = {
+};
+
+uint8_t gc2015_exposure_neg3[] = {
+};
+
+uint8_t gc2015_exposure_zero[] = {
+};
+
+uint8_t gc2015_exposure_pos3[] = {
+};
+
+uint8_t gc2015_exposure_pos6[] = {
+};
+
+
+// Color Effect
+uint8_t gc2015_colorfx_none[] = {
+};
+
+uint8_t gc2015_colorfx_bw[] = {
+};
+
+uint8_t gc2015_colorfx_sepia[] = {
+};
+
+uint8_t gc2015_colorfx_negative[] = {
+};
+
+uint8_t gc2015_colorfx_emboss[] = {
+};
+
+uint8_t gc2015_colorfx_sketch[] = {
+};
+
+uint8_t gc2015_colorfx_sky_blue[] = {
+};
+
+uint8_t gc2015_colorfx_grass_green[] = {
+};
+
+uint8_t gc2015_colorfx_skin_whiten[] = {
+};
+
+uint8_t gc2015_colorfx_vivid[] = {
+};
+
+// Brightness
+uint8_t gc2015_brightness_neg4[] = {
+};
+
+uint8_t gc2015_brightness_neg3[] = {
+};
+
+uint8_t gc2015_brightness_neg2[] = {
+};
+
+uint8_t gc2015_brightness_neg1[] = {
+};
+
+uint8_t gc2015_brightness_zero[] = {
+};
+
+uint8_t gc2015_brightness_pos1[] = {
+};
+
+uint8_t gc2015_brightness_pos2[] = {
+};
+
+uint8_t gc2015_brightness_pos3[] = {
+};
+
+uint8_t gc2015_brightness_pos4[] = {
+};
+
+// Contrast
+uint8_t gc2015_contrast_neg4[] = {
+};
+
+uint8_t gc2015_contrast_neg3[] = {
+};
+
+uint8_t gc2015_contrast_neg2[] = {
+};
+
+uint8_t gc2015_contrast_neg1[] = {
+};
+
+uint8_t gc2015_contrast_zero[] = {
+};
+
+uint8_t gc2015_contrast_pos1[] = {
+};
+
+uint8_t gc2015_contrast_pos2[] = {
+};
+
+uint8_t gc2015_contrast_pos3[] = {
+};
+
+uint8_t gc2015_contrast_pos4[] = {
+};
+
+// Saturation
+uint8_t gc2015_saturation_neg4[] = {
+};
+
+uint8_t gc2015_saturation_neg3[] = {
+};
+
+uint8_t gc2015_saturation_neg2[] = {
+};
+
+uint8_t gc2015_saturation_neg1[] = {
+};
+
+uint8_t gc2015_saturation_zero[] = {
+};
+
+uint8_t gc2015_saturation_pos1[] = {
+};
+
+uint8_t gc2015_saturation_pos2[] = {
+};
+
+uint8_t gc2015_saturation_pos3[] = {
+};
+
+uint8_t gc2015_saturation_pos4[] = {
+};
+
+
+// Resolution
+
+// QCIF
+uint8_t gc2015_176x144[]={
+};
+
+// QVGA
+uint8_t gc2015_320x240[]={
+0xfe, 0x80,
+0xfe, 0x80,
+0xfe, 0x80,
+0xfe, 0x00,
+0x45, 0x00,
+0x02, 0x01,
+0x2a, 0xca,
+0x48, 0x40,
+0x59, 0x11,
+0x50, 0x01,
+0x51, 0x00,
+0x52, 0x00,
+0x53, 0x00,
+0x54, 0x00,
+0x55, 0x02,
+0x56, 0x58,
+0x57, 0x03,
+0x58, 0x20,
+0x59, 0xaa,
+0x5b, 0x01,
+0x5c, 0x34,
+0x5d, 0x00,
+0x5e, 0x00,
+0x5f, 0x01,
+0x60, 0x34,
+0x61, 0x00,
+0x62, 0x00,
+0xfe, 0x01,
+0xb0, 0x13,
+0xb1, 0x20,
+0xb2, 0x20,
+0xb3, 0x20,
+0xb4, 0x20,
+0xb5, 0x20,
+0xb6, 0x20,
+0xb7, 0x00,
+0xb8, 0x80,
+0xb9, 0x80,
+0xba, 0x13,
+0xbb, 0x20,
+0xbc, 0x20,
+0xbd, 0x20,
+0xbe, 0x20,
+0xbf, 0x20,
+0xc0, 0x20,
+0xc1, 0x00,
+0xc2, 0x80,
+0xc3, 0x80,
+0xfe, 0x00,
+0x29, 0x00,
+0x2b, 0x06,
+0x32, 0x0c,
+0x33, 0x0f,
+0x34, 0x00,
+0x35, 0x88,
+0x37, 0x16,
+0x40, 0xff,
+0x41, 0x24,
+0x42, 0x76,
+0x4b, 0xea,
+0x4d, 0x03,
+0x4f, 0x01,
+0x63, 0x77,
+0x66, 0x00,
+0x6d, 0x04,
+0x6e, 0x18,
+0x70, 0x18,
+0x6f, 0x10,
+0x71, 0x10,
+0x73, 0x03,
+0x80, 0x07,
+0x82, 0x08,
+0x8a, 0x7c,
+0x8c, 0x02,
+0x8e, 0x02,
+0x8f, 0x48,
+0xb0, 0x44,
+0xb1, 0xfe,
+0xb2, 0x00,
+0xb3, 0xf8,
+0xb4, 0x48,
+0xb5, 0xf8,
+0xb6, 0x00,
+0xb7, 0x04,
+0xb8, 0x00,
+0xbF, 0x0E,
+0xc0, 0x1C,
+0xc1, 0x34,
+0xc2, 0x48,
+0xc3, 0x5A,
+0xc4, 0x6B,
+0xc5, 0x7B,
+0xc6, 0x95,
+0xc7, 0xAB,
+0xc8, 0xBF,
+0xc9, 0xCE,
+0xcA, 0xD9,
+0xcB, 0xE4,
+0xcC, 0xEC,
+0xcD, 0xF7,
+0xcE, 0xFD,
+0xcF, 0xFF,
+0xCF, 0xFF,
+0xd1, 0x38,
+0xd2, 0x38,
+0xde, 0x21,
+0x98, 0x30,
+0x99, 0xf0,
+0x9b, 0x00,
+0xfe, 0x01,
+0x10, 0x45,
+0x11, 0x32,
+0x13, 0x60,
+0x17, 0x00,
+0x1c, 0x96,
+0x1e, 0x11,
+0x21, 0xc0,
+0x22, 0x40,
+0x2d, 0x06,
+0x2e, 0x00,
+0x1e, 0x32,
+0x33, 0x00,
+0x57, 0x40,
+0x5d, 0x44,
+0x5c, 0x35,
+0x5e, 0x29,
+0x5f, 0x50,
+0x60, 0x50,
+0x65, 0xc0,
+0x80, 0x82,
+0x81, 0x00,
+0x83, 0x00,
+0xfe, 0x00,
+0x45, 0x0f,
+0x46, 0x02,
+//0x46, 0x03,
+0x44, 0xa2,
+0xfe, 0x00,
+0xfe, 0x01,
+0x33, 0x20,
+0xfe, 0x00,
+0x43, 0x00,
+0x42, 0x74,
+0x7a, 0x5f,
+0x7b, 0x40,
+0x7c, 0x47,
+0x42, 0x76,
+0xfe, 0x01,
+0x13, 0x60,
+0xfe, 0x00,
+0xd5, 0x00,
+0x05, 0x01,
+0x06, 0xc1,
+0x07, 0x00,
+0x08, 0x40,
+0xfe, 0x01,
+0x29, 0x01,
+0x2a, 0x00,
+0x2b, 0x05,
+0x2c, 0x00,
+0x2d, 0x06,
+0x2e, 0x00,
+0x2f, 0x08,
+0x30, 0x00,
+0x31, 0x09,
+0x32, 0x00,
+0xfe, 0x00,
+0xfe, 0x01,
+0x33, 0x20,
+0xfe, 0x00,
+};
+
+// CIF
+uint8_t gc2015_352x288[]={
+};
+
+// VGA
+uint8_t gc2015_640x480[]={
+ 0xfe,0x00,
+ 0x02,0x01,
+ 0x2a,0xca,
+ 0x59,0x55,
+ 0x5a,0x06,
+ 0x5b,0x00,
+ 0x5c,0x00,
+ 0x5d,0x01,
+ 0x5e,0x23,
+ 0x5f,0x00,
+ 0x60,0x00,
+ 0x61,0x01,
+ 0x62,0x23,
+ 0x50,0x01,
+ 0x51,0x00,
+ 0x52,0x00,
+ 0x53,0x00,
+ 0x54,0x00,
+ 0x55,0x01,
+ 0x56,0xe0,
+ 0x57,0x02,
+ 0x58,0x80,
+ 0x48,0x68,
+ 0x4f,0x01,
+};
+
+// SVGA
+uint8_t gc2015_800x600[]={
+};
+
+// XGA
+uint8_t gc2015_1024x768[]={
+};
+
+// 720p
+uint8_t gc2015_1280x720[]={
+};
+
+// UXGA
+uint8_t gc2015_1600x1200[]={
+0x4f,0x00,
+0x42,0x74,
+0xfe,0x00,
+0x02,0x00,
+0x2a,0x0a,
+0x59,0x11,
+0x5a,0x06,
+0x5b,0x00,
+0x5c,0x00,
+0x5d,0x00,
+0x5e,0x00,
+0x5f,0x00,
+0x60,0x00,
+0x61,0x00,
+0x62,0x00,
+0x50,0x01,
+0x51,0x00,
+0x52,0x00,
+0x53,0x00,
+0x54,0x00,
+0x55,0x04,
+0x56,0xb0,
+0x57,0x06,
+0x58,0x40,
+0x48,0x60,
+0x0,0x0,
+0x12,0x1,
+0x13,0x2a,
+0x6e,0x1b,
+0x6f,0x20,
+0x70,0x1b,
+0x71,0x20,
+};
+
+
+// Initiliztion
+uint8_t gc2015_default_regs_init[] = {
+0xfe, 0x80,
+0xfe, 0x80,
+0xfe, 0x80,
+0xfe, 0x00,
+0x45, 0x00,
+0x02, 0x01,
+0x2a, 0xca,
+0x48, 0x40,
+0x59, 0x11,
+0x50, 0x01,
+0x51, 0x00,
+0x52, 0x00,
+0x53, 0x00,
+0x54, 0x00,
+0x55, 0x02,
+0x56, 0x58,
+0x57, 0x03,
+0x58, 0x20,
+0x59, 0x55,
+0x5b, 0x01,
+0x5c, 0x34,
+0x5d, 0x00,
+0x5e, 0x00,
+0x5f, 0x01,
+0x60, 0x34,
+0x61, 0x00,
+0x62, 0x00,
+0xfe, 0x01,
+0xb0, 0x13,
+0xb1, 0x20,
+0xb2, 0x20,
+0xb3, 0x20,
+0xb4, 0x20,
+0xb5, 0x20,
+0xb6, 0x20,
+0xb7, 0x00,
+0xb8, 0x80,
+0xb9, 0x80,
+0xba, 0x13,
+0xbb, 0x20,
+0xbc, 0x20,
+0xbd, 0x20,
+0xbe, 0x20,
+0xbf, 0x20,
+0xc0, 0x20,
+0xc1, 0x00,
+0xc2, 0x80,
+0xc3, 0x80,
+0xfe, 0x00,
+0x29, 0x00,
+0x2b, 0x06,
+0x32, 0x0c,
+0x33, 0x0f,
+0x34, 0x00,
+0x35, 0x88,
+0x37, 0x16,
+0x40, 0xff,
+0x41, 0x24,
+0x42, 0x76,
+0x4b, 0xea,
+0x4d, 0x03,
+0x4f, 0x01,
+0x63, 0x77,
+0x66, 0x00,
+0x6d, 0x04,
+0x6e, 0x18,
+0x70, 0x18,
+0x6f, 0x10,
+0x71, 0x10,
+0x73, 0x03,
+0x80, 0x07,
+0x82, 0x08,
+0x8a, 0x7c,
+0x8c, 0x02,
+0x8e, 0x02,
+0x8f, 0x22,//48
+0xb0, 0x44,
+0xb1, 0xfe,
+0xb2, 0x00,
+0xb3, 0xf8,
+0xb4, 0x48,
+0xb5, 0xf8,
+0xb6, 0x00,
+0xb7, 0x04,
+0xb8, 0x00,
+0xbF, 0x0E,
+0xc0, 0x1C,
+0xc1, 0x34,
+0xc2, 0x48,
+0xc3, 0x5A,
+0xc4, 0x6B,
+0xc5, 0x7B,
+0xc6, 0x95,
+0xc7, 0xAB,
+0xc8, 0xBF,
+0xc9, 0xCE,
+0xcA, 0xD9,
+0xcB, 0xE4,
+0xcC, 0xEC,
+0xcD, 0xF7,
+0xcE, 0xFD,
+0xcF, 0xFF,
+0xCF, 0xFF,
+0xd1, 0x38,
+0xd2, 0x38,
+0xde, 0x21,
+0x98, 0x30,
+0x99, 0xf0,
+0x9b, 0x00,
+0xfe, 0x01,
+0x10, 0x45,
+0x11, 0x32,
+0x13, 0x70,//60
+0x17, 0x00,
+0x1c, 0x96,
+0x1e, 0x11,
+0x21, 0xc0,
+0x22, 0x40,
+0x2d, 0x06,
+0x2e, 0x00,
+0x1e, 0x32,
+0x33, 0x00,
+0x57, 0x40,
+0x5d, 0x44,
+0x5c, 0x35,
+0x5e, 0x29,
+0x5f, 0x50,
+0x60, 0x50,
+0x65, 0xc0,
+0x80, 0x82,
+0x81, 0x00,
+0x83, 0x00,
+0xfe, 0x00,
+0x45, 0x0f,
+0x46, 0x02,
+//0x46, 0x03,
+0x44, 0xa2,
+0xfe, 0x00,
+0xfe, 0x01,
+0x33, 0x20,
+0xfe, 0x00,
+0x43, 0x00,
+0x42, 0x74,
+0x7a, 0x5f,
+0x7b, 0x40,
+0x7c, 0x47,
+0x42, 0x76,
+0xfe, 0x01,
+0x13, 0x70,//60
+0xfe, 0x00,
+0xd5, 0x00,
+0x05, 0x01,
+0x06, 0xc1,
+0x07, 0x00,
+0x08, 0x40,
+0xfe, 0x01,
+0x29, 0x01,
+0x2a, 0x00,
+0x2b, 0x05,
+0x2c, 0x00,
+0x2d, 0x06,
+0x2e, 0x00,
+0x2f, 0x08,
+0x30, 0x00,
+0x31, 0x09,
+0x32, 0x00,
+0xfe, 0x00,
+0xfe, 0x01,
+0x33, 0x20,
+0xfe, 0x00,
+};
+
+#endif