/***************************************************************************
 * Plug-in for PAS106B image sensor connected to the SN9C10x PC Camera     *
 * Controllers                                                             *
 *                                                                         *
 * Copyright (C) 2004-2005 by Luca Risolia <luca.risolia@studio.unibo.it>  *
 *                                                                         *
 * This program is free software; you can redistribute it and/or modify    *
 * it under the terms of the GNU General Public License as published by    *
 * the Free Software Foundation; either version 2 of the License, or       *
 * (at your option) any later version.                                     *
 *                                                                         *
 * This program is distributed in the hope that it will be useful,         *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
 * GNU General Public License for more details.                            *
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program; if not, write to the Free Software             *
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               *
 ***************************************************************************/

#include <linux/delay.h>
#include "sn9c102_sensor.h"


static struct sn9c102_sensor pas106b;


static int pas106b_init(struct sn9c102_device* cam)
{
	int err = 0;

	err += sn9c102_write_reg(cam, 0x00, 0x10);
	err += sn9c102_write_reg(cam, 0x00, 0x11);
	err += sn9c102_write_reg(cam, 0x00, 0x14);
	err += sn9c102_write_reg(cam, 0x20, 0x17);
	err += sn9c102_write_reg(cam, 0x20, 0x19);
	err += sn9c102_write_reg(cam, 0x09, 0x18);

	err += sn9c102_i2c_write(cam, 0x02, 0x0c);
	err += sn9c102_i2c_write(cam, 0x05, 0x5a);
	err += sn9c102_i2c_write(cam, 0x06, 0x88);
	err += sn9c102_i2c_write(cam, 0x07, 0x80);
	err += sn9c102_i2c_write(cam, 0x10, 0x06);
	err += sn9c102_i2c_write(cam, 0x11, 0x06);
	err += sn9c102_i2c_write(cam, 0x12, 0x00);
	err += sn9c102_i2c_write(cam, 0x14, 0x02);
	err += sn9c102_i2c_write(cam, 0x13, 0x01);

	msleep(400);

	return err;
}


static int pas106b_get_ctrl(struct sn9c102_device* cam, 
                            struct v4l2_control* ctrl)
{
	switch (ctrl->id) {
	case V4L2_CID_EXPOSURE:
		{
			int r1 = sn9c102_i2c_read(cam, 0x03),
			    r2 = sn9c102_i2c_read(cam, 0x04);
			if (r1 < 0 || r2 < 0)
				return -EIO;
			ctrl->value = (r1 << 4) | (r2 & 0x0f);
		}
		return 0;
	case V4L2_CID_RED_BALANCE:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x0c)) < 0)
			return -EIO;
		ctrl->value &= 0x1f;
		return 0;
	case V4L2_CID_BLUE_BALANCE:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x09)) < 0)
			return -EIO;
		ctrl->value &= 0x1f;
		return 0;
	case V4L2_CID_GAIN:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x0e)) < 0)
			return -EIO;
		ctrl->value &= 0x1f;
		return 0;
	case V4L2_CID_CONTRAST:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x0f)) < 0)
			return -EIO;
		ctrl->value &= 0x07;
		return 0;
	case SN9C102_V4L2_CID_GREEN_BALANCE:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x0a)) < 0)
			return -EIO;
		ctrl->value = (ctrl->value & 0x1f) << 1;
		return 0;
	case SN9C102_V4L2_CID_DAC_MAGNITUDE:
		if ((ctrl->value = sn9c102_i2c_read(cam, 0x08)) < 0)
			return -EIO;
		ctrl->value &= 0xf8;
		return 0;
	default:
		return -EINVAL;
	}
}


static int pas106b_set_ctrl(struct sn9c102_device* cam, 
                            const struct v4l2_control* ctrl)
{
	int err = 0;

	switch (ctrl->id) {
	case V4L2_CID_EXPOSURE:
		err += sn9c102_i2c_write(cam, 0x03, ctrl->value >> 4);
		err += sn9c102_i2c_write(cam, 0x04, ctrl->value & 0x0f);
		break;
	case V4L2_CID_RED_BALANCE:
		err += sn9c102_i2c_write(cam, 0x0c, ctrl->value);
		break;
	case V4L2_CID_BLUE_BALANCE:
		err += sn9c102_i2c_write(cam, 0x09, ctrl->value);
		break;
	case V4L2_CID_GAIN:
		err += sn9c102_i2c_write(cam, 0x0e, ctrl->value);
		break;
	case V4L2_CID_CONTRAST:
		err += sn9c102_i2c_write(cam, 0x0f, ctrl->value);
		break;
	case SN9C102_V4L2_CID_GREEN_BALANCE:
		err += sn9c102_i2c_write(cam, 0x0a, ctrl->value >> 1);
		err += sn9c102_i2c_write(cam, 0x0b, ctrl->value >> 1);
		break;
	case SN9C102_V4L2_CID_DAC_MAGNITUDE:
		err += sn9c102_i2c_write(cam, 0x08, ctrl->value << 3);
		break;
	default:
		return -EINVAL;
	}
	err += sn9c102_i2c_write(cam, 0x13, 0x01);

	return err ? -EIO : 0;
}


static int pas106b_set_crop(struct sn9c102_device* cam, 
                            const struct v4l2_rect* rect)
{
	struct sn9c102_sensor* s = &pas106b;
	int err = 0;
	u8 h_start = (u8)(rect->left - s->cropcap.bounds.left) + 4,
	   v_start = (u8)(rect->top - s->cropcap.bounds.top) + 3;

	err += sn9c102_write_reg(cam, h_start, 0x12);
	err += sn9c102_write_reg(cam, v_start, 0x13);

	return err;
}


static int pas106b_set_pix_format(struct sn9c102_device* cam, 
                                  const struct v4l2_pix_format* pix)
{
	int err = 0;

	if (pix->pixelformat == V4L2_PIX_FMT_SN9C10X)
		err += sn9c102_write_reg(cam, 0x2c, 0x17);
	else
		err += sn9c102_write_reg(cam, 0x20, 0x17);

	return err;
}


static struct sn9c102_sensor pas106b = {
	.name = "PAS106B",
	.maintainer = "Luca Risolia <luca.risolia@studio.unibo.it>",
	.sysfs_ops = SN9C102_I2C_READ | SN9C102_I2C_WRITE,
	.frequency = SN9C102_I2C_400KHZ | SN9C102_I2C_100KHZ,
	.interface = SN9C102_I2C_2WIRES,
	.i2c_slave_id = 0x40,
	.init = &pas106b_init,
	.qctrl = {
		{
			.id = V4L2_CID_EXPOSURE,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "exposure",
			.minimum = 0x125,
			.maximum = 0xfff,
			.step = 0x001,
			.default_value = 0x140,
			.flags = 0,
		},
		{
			.id = V4L2_CID_GAIN,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "global gain",
			.minimum = 0x00,
			.maximum = 0x1f,
			.step = 0x01,
			.default_value = 0x0d,
			.flags = 0,
		},
		{
			.id = V4L2_CID_CONTRAST,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "contrast",
			.minimum = 0x00,
			.maximum = 0x07,
			.step = 0x01,
			.default_value = 0x00, /* 0x00~0x03 have same effect */
			.flags = 0,
		},
		{
			.id = V4L2_CID_RED_BALANCE,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "red balance",
			.minimum = 0x00,
			.maximum = 0x1f,
			.step = 0x01,
			.default_value = 0x04,
			.flags = 0,
		},
		{
			.id = V4L2_CID_BLUE_BALANCE,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "blue balance",
			.minimum = 0x00,
			.maximum = 0x1f,
			.step = 0x01,
			.default_value = 0x06,
			.flags = 0,
		},
		{
			.id = SN9C102_V4L2_CID_GREEN_BALANCE,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "green balance",
			.minimum = 0x00,
			.maximum = 0x3e,
			.step = 0x02,
			.default_value = 0x02,
			.flags = 0,
		},
		{
			.id = SN9C102_V4L2_CID_DAC_MAGNITUDE,
			.type = V4L2_CTRL_TYPE_INTEGER,
			.name = "DAC magnitude",
			.minimum = 0x00,
			.maximum = 0x1f,
			.step = 0x01,
			.default_value = 0x01,
			.flags = 0,
		},
	},
	.get_ctrl = &pas106b_get_ctrl,
	.set_ctrl = &pas106b_set_ctrl,
	.cropcap = {
		.bounds = {
			.left = 0,
			.top = 0,
			.width = 352,
			.height = 288,
		},
		.defrect = {
			.left = 0,
			.top = 0,
			.width = 352,
			.height = 288,
		},
	},
	.set_crop = &pas106b_set_crop,
	.pix_format = {
		.width = 352,
		.height = 288,
		.pixelformat = V4L2_PIX_FMT_SBGGR8,
		.priv = 8, /* we use this field as 'bits per pixel' */
	},
	.set_pix_format = &pas106b_set_pix_format
};


int sn9c102_probe_pas106b(struct sn9c102_device* cam)
{
	int r0 = 0, r1 = 0, err = 0;
	unsigned int pid = 0;

	/*
	   Minimal initialization to enable the I2C communication
	   NOTE: do NOT change the values!
	*/
	err += sn9c102_write_reg(cam, 0x01, 0x01); /* sensor power down */
	err += sn9c102_write_reg(cam, 0x00, 0x01); /* sensor power on */
	err += sn9c102_write_reg(cam, 0x28, 0x17); /* sensor clock at 24 MHz */
	if (err)
		return -EIO;

	r0 = sn9c102_i2c_try_read(cam, &pas106b, 0x00);
	r1 = sn9c102_i2c_try_read(cam, &pas106b, 0x01);

	if (r0 < 0 || r1 < 0)
		return -EIO;

	pid = (r0 << 11) | ((r1 & 0xf0) >> 4);
	if (pid != 0x007)
		return -ENODEV;

	sn9c102_attach_sensor(cam, &pas106b);

	return 0;
}
