m5602_ov7660.c revision 4763fa84d9942137b011629be2e7547a23cdfbc6
14763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén/* 24763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Driver for the ov7660 sensor 34763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * 44763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Copyright (C) 2009 Erik Andrén 54763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project. 64763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Copyright (C) 2005 m5603x Linux Driver Project <m5602@x3ng.com.br> 74763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * 84763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Portions of code to USB interface and ALi driver software, 94763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * Copyright (c) 2006 Willem Duinker 104763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * v4l2 interface modeled after the V4L2 driver 114763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * for SN9C10x PC Camera Controllers 124763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * 134763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * This program is free software; you can redistribute it and/or 144763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * modify it under the terms of the GNU General Public License as 154763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * published by the Free Software Foundation, version 2. 164763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén * 174763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén */ 184763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 194763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén#include "m5602_ov7660.h" 204763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 214763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénconst static struct ctrl ov7660_ctrls[] = {}; 224763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 234763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénstatic struct v4l2_pix_format ov7660_modes[] = { 244763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén { 254763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 640, 264763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 480, 274763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén V4L2_PIX_FMT_SBGGR8, 284763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén V4L2_FIELD_NONE, 294763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén .sizeimage = 304763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 640 * 480, 314763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén .bytesperline = 640, 324763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén .colorspace = V4L2_COLORSPACE_SRGB, 334763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén .priv = 0 344763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén } 354763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén}; 364763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 374763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénstatic void ov7660_dump_registers(struct sd *sd); 384763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 394763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénint ov7660_probe(struct sd *sd) 404763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén{ 414763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén return -ENODEV; 424763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén} 434763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 444763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénint ov7660_init(struct sd *sd) 454763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén{ 464763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén return 0; 474763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén} 484763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 494763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénint ov7660_start(struct sd *sd) 504763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén{ 514763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén return 0; 524763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén} 534763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 544763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénint ov7660_stop(struct sd *sd) 554763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén{ 564763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén return 0; 574763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén} 584763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 594763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénvoid ov7660_disconnect(struct sd *sd) {} 604763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 614763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrénstatic void ov7660_dump_registers(struct sd *sd) 624763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén{ 634763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén int address; 644763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("Dumping the ov7660 register state"); 654763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén for (address = 0; address < 0xa9; address++) { 664763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén u8 value; 674763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén m5602_read_sensor(sd, address, &value, 1); 684763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("register 0x%x contains 0x%x", 694763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén address, value); 704763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén } 714763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 724763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("ov7660 register state dump complete"); 734763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 744763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("Probing for which registers that are read/write"); 754763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén for (address = 0; address < 0xff; address++) { 764763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén u8 old_value, ctrl_value; 774763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén u8 test_value[2] = {0xff, 0xff}; 784763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 794763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén m5602_read_sensor(sd, address, &old_value, 1); 804763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén m5602_write_sensor(sd, address, test_value, 1); 814763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén m5602_read_sensor(sd, address, &ctrl_value, 1); 824763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 834763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén if (ctrl_value == test_value[0]) 844763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("register 0x%x is writeable", address); 854763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén else 864763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén info("register 0x%x is read only", address); 874763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 884763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén /* Restore original value */ 894763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén m5602_write_sensor(sd, address, &old_value, 1); 904763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén } 914763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén} 924763fa84d9942137b011629be2e7547a23cdfbc6Erik Andrén 93