diff options
author | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
commit | 871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch) | |
tree | 8718f573808810c2a1e8cb8fb6ac469093ca2784 /drivers/media/video/wmt_v4l2/sensors/gc2015 | |
parent | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff) | |
download | FOSSEE-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-x | drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.c | 225 | ||||
-rwxr-xr-x | drivers/media/video/wmt_v4l2/sensors/gc2015/gc2015.h | 601 |
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 |