Path: blob/master/drivers/media/video/gspca/m5602/m5602_bridge.h
17887 views
/*1* USB Driver for ALi m5602 based webcams2*3* Copyright (C) 2008 Erik Andrén4* Copyright (C) 2007 Ilyes Gouta. Based on the m5603x Linux Driver Project.5* Copyright (C) 2005 m5603x Linux Driver Project <[email protected]>6*7* Portions of code to USB interface and ALi driver software,8* Copyright (c) 2006 Willem Duinker9* v4l2 interface modeled after the V4L2 driver10* for SN9C10x PC Camera Controllers11*12* This program is free software; you can redistribute it and/or13* modify it under the terms of the GNU General Public License as14* published by the Free Software Foundation, version 2.15*16*/1718#ifndef M5602_BRIDGE_H_19#define M5602_BRIDGE_H_2021#include <linux/slab.h>22#include "gspca.h"2324#define MODULE_NAME "ALi m5602"2526/*****************************************************************************/2728#define M5602_XB_SENSOR_TYPE 0x0029#define M5602_XB_SENSOR_CTRL 0x0130#define M5602_XB_LINE_OF_FRAME_H 0x0231#define M5602_XB_LINE_OF_FRAME_L 0x0332#define M5602_XB_PIX_OF_LINE_H 0x0433#define M5602_XB_PIX_OF_LINE_L 0x0534#define M5602_XB_VSYNC_PARA 0x0635#define M5602_XB_HSYNC_PARA 0x0736#define M5602_XB_TEST_MODE_1 0x0837#define M5602_XB_TEST_MODE_2 0x0938#define M5602_XB_SIG_INI 0x0a39#define M5602_XB_DS_PARA 0x0e40#define M5602_XB_TRIG_PARA 0x0f41#define M5602_XB_CLK_PD 0x1042#define M5602_XB_MCU_CLK_CTRL 0x1243#define M5602_XB_MCU_CLK_DIV 0x1344#define M5602_XB_SEN_CLK_CTRL 0x1445#define M5602_XB_SEN_CLK_DIV 0x1546#define M5602_XB_AUD_CLK_CTRL 0x1647#define M5602_XB_AUD_CLK_DIV 0x1748#define M5602_OB_AC_LINK_STATE 0x2249#define M5602_OB_PCM_SLOT_INDEX 0x2450#define M5602_OB_GPIO_SLOT_INDEX 0x2551#define M5602_OB_ACRX_STATUS_ADDRESS_H 0x2852#define M5602_OB_ACRX_STATUS_DATA_L 0x2953#define M5602_OB_ACRX_STATUS_DATA_H 0x2a54#define M5602_OB_ACTX_COMMAND_ADDRESS 0x3155#define M5602_OB_ACRX_COMMAND_DATA_L 0x3256#define M5602_OB_ACTX_COMMAND_DATA_H 0X3357#define M5602_XB_DEVCTR1 0x4158#define M5602_XB_EPSETR0 0x4259#define M5602_XB_EPAFCTR 0x4760#define M5602_XB_EPBFCTR 0x4961#define M5602_XB_EPEFCTR 0x4f62#define M5602_XB_TEST_REG 0x5363#define M5602_XB_ALT2SIZE 0x5464#define M5602_XB_ALT3SIZE 0x5565#define M5602_XB_OBSFRAME 0x5666#define M5602_XB_PWR_CTL 0x5967#define M5602_XB_ADC_CTRL 0x6068#define M5602_XB_ADC_DATA 0x6169#define M5602_XB_MISC_CTRL 0x6270#define M5602_XB_SNAPSHOT 0x6371#define M5602_XB_SCRATCH_1 0x6472#define M5602_XB_SCRATCH_2 0x6573#define M5602_XB_SCRATCH_3 0x6674#define M5602_XB_SCRATCH_4 0x6775#define M5602_XB_I2C_CTRL 0x6876#define M5602_XB_I2C_CLK_DIV 0x6977#define M5602_XB_I2C_DEV_ADDR 0x6a78#define M5602_XB_I2C_REG_ADDR 0x6b79#define M5602_XB_I2C_DATA 0x6c80#define M5602_XB_I2C_STATUS 0x6d81#define M5602_XB_GPIO_DAT_H 0x7082#define M5602_XB_GPIO_DAT_L 0x7183#define M5602_XB_GPIO_DIR_H 0x7284#define M5602_XB_GPIO_DIR_L 0x7385#define M5602_XB_GPIO_EN_H 0x7486#define M5602_XB_GPIO_EN_L 0x7587#define M5602_XB_GPIO_DAT 0x7688#define M5602_XB_GPIO_DIR 0x7789#define M5602_XB_SEN_CLK_CONTROL 0x8090#define M5602_XB_SEN_CLK_DIVISION 0x8191#define M5602_XB_CPR_CLK_CONTROL 0x8292#define M5602_XB_CPR_CLK_DIVISION 0x8393#define M5602_XB_MCU_CLK_CONTROL 0x8494#define M5602_XB_MCU_CLK_DIVISION 0x8595#define M5602_XB_DCT_CLK_CONTROL 0x8696#define M5602_XB_DCT_CLK_DIVISION 0x8797#define M5602_XB_EC_CLK_CONTROL 0x8898#define M5602_XB_EC_CLK_DIVISION 0x8999#define M5602_XB_LBUF_CLK_CONTROL 0x8a100#define M5602_XB_LBUF_CLK_DIVISION 0x8b101102#define I2C_BUSY 0x80103104/*****************************************************************************/105106/* Driver info */107#define DRIVER_AUTHOR "ALi m5602 Linux Driver Project"108#define DRIVER_DESC "ALi m5602 webcam driver"109110#define M5602_ISOC_ENDPOINT_ADDR 0x81111#define M5602_INTR_ENDPOINT_ADDR 0x82112113#define M5602_URB_MSG_TIMEOUT 5000114115/*****************************************************************************/116117/* A skeleton used for sending messages to the m5602 bridge */118static const unsigned char bridge_urb_skeleton[] = {1190x13, 0x00, 0x81, 0x00120};121122/* A skeleton used for sending messages to the sensor */123static const unsigned char sensor_urb_skeleton[] = {1240x23, M5602_XB_GPIO_EN_H, 0x81, 0x06,1250x23, M5602_XB_MISC_CTRL, 0x81, 0x80,1260x13, M5602_XB_I2C_DEV_ADDR, 0x81, 0x00,1270x13, M5602_XB_I2C_REG_ADDR, 0x81, 0x00,1280x13, M5602_XB_I2C_DATA, 0x81, 0x00,1290x13, M5602_XB_I2C_CTRL, 0x81, 0x11130};131132struct sd {133struct gspca_dev gspca_dev;134135/* A pointer to the currently connected sensor */136const struct m5602_sensor *sensor;137138struct sd_desc *desc;139140/* Sensor private data */141void *sensor_priv;142143/* The current frame's id, used to detect frame boundaries */144u8 frame_id;145146/* The current frame count */147u32 frame_count;148};149150int m5602_read_bridge(151struct sd *sd, const u8 address, u8 *i2c_data);152153int m5602_write_bridge(154struct sd *sd, const u8 address, const u8 i2c_data);155156int m5602_write_sensor(struct sd *sd, const u8 address,157u8 *i2c_data, const u8 len);158159int m5602_read_sensor(struct sd *sd, const u8 address,160u8 *i2c_data, const u8 len);161162#endif163164165