提交 1a9fc855 编写于 作者: M Mauro Carvalho Chehab

V4L/DVB (12733): cx25821: some CodingStyle fixes

The original driver were generated with some dos editor, and used their
own coding style.

This patch does some automatic CodingStyle fixes, by running dos2unix
and Lindent tools.

More work still needs to be done for it to use upstream CodingStyle.
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 bb4c9a74
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <hiep.huynh@conexant.com>, <shu.lin@conexant.com> * Authors <hiep.huynh@conexant.com>, <shu.lin@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#define NUM_AUDIO_PROGS 8
#define NUM_AUDIO_PROGS 8 #define NUM_AUDIO_FRAMES 8
#define NUM_AUDIO_FRAMES 8 #define END_OF_FILE 0
#define END_OF_FILE 0 #define IN_PROGRESS 1
#define IN_PROGRESS 1 #define RESET_STATUS -1
#define RESET_STATUS -1 #define FIFO_DISABLE 0
#define FIFO_DISABLE 0 #define FIFO_ENABLE 1
#define FIFO_ENABLE 1 #define NUM_NO_OPS 4
#define NUM_NO_OPS 4
#define RISC_READ_INSTRUCTION_SIZE 12
#define RISC_JUMP_INSTRUCTION_SIZE 12
#define RISC_READ_INSTRUCTION_SIZE 12 #define RISC_WRITECR_INSTRUCTION_SIZE 16
#define RISC_JUMP_INSTRUCTION_SIZE 12 #define RISC_SYNC_INSTRUCTION_SIZE 4
#define RISC_WRITECR_INSTRUCTION_SIZE 16 #define DWORD_SIZE 4
#define RISC_SYNC_INSTRUCTION_SIZE 4 #define AUDIO_SYNC_LINE 4
#define DWORD_SIZE 4
#define AUDIO_SYNC_LINE 4 #define LINES_PER_AUDIO_BUFFER 15
#define AUDIO_LINE_SIZE 128
#define AUDIO_DATA_BUF_SZ (AUDIO_LINE_SIZE * LINES_PER_AUDIO_BUFFER)
#define LINES_PER_AUDIO_BUFFER 15
#define AUDIO_LINE_SIZE 128 #define USE_RISC_NOOP_AUDIO 1
#define AUDIO_DATA_BUF_SZ (AUDIO_LINE_SIZE * LINES_PER_AUDIO_BUFFER)
#ifdef USE_RISC_NOOP_AUDIO
#define USE_RISC_NOOP_AUDIO 1 #define AUDIO_RISC_DMA_BUF_SIZE ( LINES_PER_AUDIO_BUFFER*RISC_READ_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + NUM_NO_OPS*DWORD_SIZE + RISC_JUMP_INSTRUCTION_SIZE)
#endif
#ifdef USE_RISC_NOOP_AUDIO
#define AUDIO_RISC_DMA_BUF_SIZE ( LINES_PER_AUDIO_BUFFER*RISC_READ_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + NUM_NO_OPS*DWORD_SIZE + RISC_JUMP_INSTRUCTION_SIZE) #ifndef USE_RISC_NOOP_AUDIO
#endif #define AUDIO_RISC_DMA_BUF_SIZE ( LINES_PER_AUDIO_BUFFER*RISC_READ_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + RISC_JUMP_INSTRUCTION_SIZE)
#endif
#ifndef USE_RISC_NOOP_AUDIO static int _line_size;
#define AUDIO_RISC_DMA_BUF_SIZE ( LINES_PER_AUDIO_BUFFER*RISC_READ_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + RISC_JUMP_INSTRUCTION_SIZE) char *_defaultAudioName = "/root/audioGOOD.wav";
#endif
static int _line_size;
char * _defaultAudioName = "/root/audioGOOD.wav";
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef __CX25821_AUDIO_H__ #ifndef __CX25821_AUDIO_H__
#define __CX25821_AUDIO_H__ #define __CX25821_AUDIO_H__
#define USE_RISC_NOOP 1
#define USE_RISC_NOOP 1 #define LINES_PER_BUFFER 15
#define LINES_PER_BUFFER 15 #define AUDIO_LINE_SIZE 128
#define AUDIO_LINE_SIZE 128
//Number of buffer programs to use at once.
//Number of buffer programs to use at once. #define NUMBER_OF_PROGRAMS 8
#define NUMBER_OF_PROGRAMS 8
//Max size of the RISC program for a buffer. - worst case is 2 writes per line
//Max size of the RISC program for a buffer. - worst case is 2 writes per line // Space is also added for the 4 no-op instructions added on the end.
// Space is also added for the 4 no-op instructions added on the end.
#ifndef USE_RISC_NOOP
#ifndef USE_RISC_NOOP #define MAX_BUFFER_PROGRAM_SIZE \
#define MAX_BUFFER_PROGRAM_SIZE \ (2*LINES_PER_BUFFER*RISC_WRITE_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE*4)
(2*LINES_PER_BUFFER*RISC_WRITE_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE*4) #endif
#endif
// MAE 12 July 2005 Try to use NOOP RISC instruction instead
// MAE 12 July 2005 Try to use NOOP RISC instruction instead #ifdef USE_RISC_NOOP
#ifdef USE_RISC_NOOP #define MAX_BUFFER_PROGRAM_SIZE \
#define MAX_BUFFER_PROGRAM_SIZE \ (2*LINES_PER_BUFFER*RISC_WRITE_INSTRUCTION_SIZE + RISC_NOOP_INSTRUCTION_SIZE*4)
(2*LINES_PER_BUFFER*RISC_WRITE_INSTRUCTION_SIZE + RISC_NOOP_INSTRUCTION_SIZE*4) #endif
#endif
//Sizes of various instructions in bytes. Used when adding instructions.
#define RISC_WRITE_INSTRUCTION_SIZE 12
//Sizes of various instructions in bytes. Used when adding instructions. #define RISC_JUMP_INSTRUCTION_SIZE 12
#define RISC_WRITE_INSTRUCTION_SIZE 12 #define RISC_SKIP_INSTRUCTION_SIZE 4
#define RISC_JUMP_INSTRUCTION_SIZE 12 #define RISC_SYNC_INSTRUCTION_SIZE 4
#define RISC_SKIP_INSTRUCTION_SIZE 4 #define RISC_WRITECR_INSTRUCTION_SIZE 16
#define RISC_SYNC_INSTRUCTION_SIZE 4 #define RISC_NOOP_INSTRUCTION_SIZE 4
#define RISC_WRITECR_INSTRUCTION_SIZE 16
#define RISC_NOOP_INSTRUCTION_SIZE 4 #define MAX_AUDIO_DMA_BUFFER_SIZE (MAX_BUFFER_PROGRAM_SIZE * NUMBER_OF_PROGRAMS + RISC_SYNC_INSTRUCTION_SIZE)
#define MAX_AUDIO_DMA_BUFFER_SIZE (MAX_BUFFER_PROGRAM_SIZE * NUMBER_OF_PROGRAMS + RISC_SYNC_INSTRUCTION_SIZE) #endif
#endif
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef _BITFUNCS_H #ifndef _BITFUNCS_H
#define _BITFUNCS_H #define _BITFUNCS_H
#define SetBit(Bit) (1 << Bit) #define SetBit(Bit) (1 << Bit)
inline u8 getBit(u32 sample, u8 index) inline u8 getBit(u32 sample, u8 index)
{ {
return (u8) ((sample >> index) & 1); return (u8) ((sample >> index) & 1);
} }
inline u32 clearBitAtPos(u32 value, u8 bit) inline u32 clearBitAtPos(u32 value, u8 bit)
{ {
return value & ~(1 << bit); return value & ~(1 << bit);
} }
inline u32 setBitAtPos(u32 sample, u8 bit) inline u32 setBitAtPos(u32 sample, u8 bit)
{ {
sample |= (1 << bit); sample |= (1 << bit);
return sample; return sample;
} }
#endif #endif
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* Based on Steven Toth <stoth@linuxtv.org> cx23885 driver * Based on Steven Toth <stoth@linuxtv.org> cx23885 driver
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
...@@ -34,39 +34,37 @@ ...@@ -34,39 +34,37 @@
struct cx25821_board cx25821_boards[] = { struct cx25821_board cx25821_boards[] = {
[UNKNOWN_BOARD] = { [UNKNOWN_BOARD] = {
.name = "UNKNOWN/GENERIC", .name = "UNKNOWN/GENERIC",
// Ensure safe default for unknown boards // Ensure safe default for unknown boards
.clk_freq = 0, .clk_freq = 0,
}, },
[CX25821_BOARD] = { [CX25821_BOARD] = {
.name = "CX25821", .name = "CX25821",
.portb = CX25821_RAW, .portb = CX25821_RAW,
.portc = CX25821_264, .portc = CX25821_264,
.input[0].type = CX25821_VMUX_COMPOSITE, .input[0].type = CX25821_VMUX_COMPOSITE,
}, },
}; };
const unsigned int cx25821_bcount = ARRAY_SIZE(cx25821_boards); const unsigned int cx25821_bcount = ARRAY_SIZE(cx25821_boards);
struct cx25821_subid cx25821_subids[]={ struct cx25821_subid cx25821_subids[] = {
{ {
.subvendor = 0x14f1, .subvendor = 0x14f1,
.subdevice = 0x0920, .subdevice = 0x0920,
.card = CX25821_BOARD, .card = CX25821_BOARD,
}, },
}; };
void cx25821_card_setup(struct cx25821_dev *dev) void cx25821_card_setup(struct cx25821_dev *dev)
{ {
static u8 eeprom[256]; static u8 eeprom[256];
if (dev->i2c_bus[0].i2c_rc == 0) if (dev->i2c_bus[0].i2c_rc == 0) {
{
dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;
tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom,
sizeof(eeprom));
} }
} }
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "cx25821.h"
#include "cx25821.h"
/********************* GPIO stuffs *********************/ /********************* GPIO stuffs *********************/
void cx25821_set_gpiopin_direction( struct cx25821_dev *dev, void cx25821_set_gpiopin_direction(struct cx25821_dev *dev,
int pin_number, int pin_number, int pin_logic_value)
int pin_logic_value)
{ {
int bit = pin_number; int bit = pin_number;
u32 gpio_oe_reg = GPIO_LO_OE; u32 gpio_oe_reg = GPIO_LO_OE;
u32 gpio_register = 0; u32 gpio_register = 0;
u32 value = 0; u32 value = 0;
// Check for valid pinNumber
if ( pin_number >= 47 )
return;
// Check for valid pinNumber
if (pin_number >= 47)
return;
if ( pin_number > 31 ) if (pin_number > 31) {
{ bit = pin_number - 31;
bit = pin_number - 31; gpio_oe_reg = GPIO_HI_OE;
gpio_oe_reg = GPIO_HI_OE;
} }
// Here we will make sure that the GPIOs 0 and 1 are output. keep the rest as is
gpio_register = cx_read(gpio_oe_reg);
// Here we will make sure that the GPIOs 0 and 1 are output. keep the rest as is if (pin_logic_value == 1) {
gpio_register = cx_read( gpio_oe_reg ); value = gpio_register | Set_GPIO_Bit(bit);
} else {
if (pin_logic_value == 1) value = gpio_register & Clear_GPIO_Bit(bit);
{ }
value = gpio_register | Set_GPIO_Bit(bit) ;
}
else
{
value = gpio_register & Clear_GPIO_Bit(bit) ;
}
cx_write( gpio_oe_reg, value ); cx_write(gpio_oe_reg, value);
} }
static void cx25821_set_gpiopin_logicvalue( struct cx25821_dev *dev, static void cx25821_set_gpiopin_logicvalue(struct cx25821_dev *dev,
int pin_number, int pin_number, int pin_logic_value)
int pin_logic_value)
{ {
int bit = pin_number; int bit = pin_number;
u32 gpio_reg = GPIO_LO; u32 gpio_reg = GPIO_LO;
u32 value = 0; u32 value = 0;
// Check for valid pinNumber // Check for valid pinNumber
if (pin_number >= 47) if (pin_number >= 47)
return; return;
cx25821_set_gpiopin_direction(dev, pin_number, 0); // change to output direction
cx25821_set_gpiopin_direction(dev, pin_number, 0); // change to output direction
if ( pin_number > 31 ) if (pin_number > 31) {
{ bit = pin_number - 31;
bit = pin_number - 31; gpio_reg = GPIO_HI;
gpio_reg = GPIO_HI;
} }
value = cx_read( gpio_reg ); value = cx_read(gpio_reg);
if (pin_logic_value == 0) {
value &= Clear_GPIO_Bit(bit);
} else {
value |= Set_GPIO_Bit(bit);
}
if (pin_logic_value == 0) cx_write(gpio_reg, value);
{
value &= Clear_GPIO_Bit(bit);
}
else
{
value |= Set_GPIO_Bit(bit);
}
cx_write( gpio_reg, value);
} }
void cx25821_gpio_init(struct cx25821_dev *dev) void cx25821_gpio_init(struct cx25821_dev *dev)
{ {
if( dev == NULL ) if (dev == NULL) {
{ return;
return;
} }
switch (dev->board) switch (dev->board) {
{ case CX25821_BOARD_CONEXANT_ATHENA10:
case CX25821_BOARD_CONEXANT_ATHENA10: default:
default: //set GPIO 5 to select the path for Medusa/Athena
//set GPIO 5 to select the path for Medusa/Athena cx25821_set_gpiopin_logicvalue(dev, 5, 1);
cx25821_set_gpiopin_logicvalue(dev, 5, 1); mdelay(20);
mdelay(20); break;
break;
} }
} }
void cx25821_gpio_init(struct athena_dev *dev); void cx25821_gpio_init(struct athena_dev *dev);
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* Based on Steven Toth <stoth@linuxtv.org> cx23885 driver * Based on Steven Toth <stoth@linuxtv.org> cx23885 driver
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "cx25821.h" #include "cx25821.h"
#include <linux/i2c.h> #include <linux/i2c.h>
static unsigned int i2c_debug; static unsigned int i2c_debug;
module_param(i2c_debug, int, 0644); module_param(i2c_debug, int, 0644);
MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]"); MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
static unsigned int i2c_scan=0; static unsigned int i2c_scan = 0;
module_param(i2c_scan, int, 0444); module_param(i2c_scan, int, 0444);
MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time"); MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
...@@ -44,7 +43,6 @@ MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time"); ...@@ -44,7 +43,6 @@ MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
#define I2C_EXTEND (1 << 3) #define I2C_EXTEND (1 << 3)
#define I2C_NOSTOP (1 << 4) #define I2C_NOSTOP (1 << 4)
static inline int i2c_slave_did_ack(struct i2c_adapter *i2c_adap) static inline int i2c_slave_did_ack(struct i2c_adapter *i2c_adap)
{ {
struct cx25821_i2c *bus = i2c_adap->algo_data; struct cx25821_i2c *bus = i2c_adap->algo_data;
...@@ -75,7 +73,8 @@ static int i2c_wait_done(struct i2c_adapter *i2c_adap) ...@@ -75,7 +73,8 @@ static int i2c_wait_done(struct i2c_adapter *i2c_adap)
return 1; return 1;
} }
static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg, int joined_rlen) static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
const struct i2c_msg *msg, int joined_rlen)
{ {
struct cx25821_i2c *bus = i2c_adap->algo_data; struct cx25821_i2c *bus = i2c_adap->algo_data;
struct cx25821_dev *dev = bus->dev; struct cx25821_dev *dev = bus->dev;
...@@ -83,13 +82,13 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -83,13 +82,13 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
int retval, cnt; int retval, cnt;
if (joined_rlen) if (joined_rlen)
dprintk(1, "%s(msg->wlen=%d, nextmsg->rlen=%d)\n", __func__, msg->len, joined_rlen); dprintk(1, "%s(msg->wlen=%d, nextmsg->rlen=%d)\n", __func__,
msg->len, joined_rlen);
else else
dprintk(1, "%s(msg->len=%d)\n", __func__, msg->len); dprintk(1, "%s(msg->len=%d)\n", __func__, msg->len);
/* Deal with i2c probe functions with zero payload */ /* Deal with i2c probe functions with zero payload */
if (msg->len == 0) if (msg->len == 0) {
{
cx_write(bus->reg_addr, msg->addr << 25); cx_write(bus->reg_addr, msg->addr << 25);
cx_write(bus->reg_ctrl, bus->i2c_period | (1 << 2)); cx_write(bus->reg_ctrl, bus->i2c_period | (1 << 2));
...@@ -125,8 +124,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -125,8 +124,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
if (retval == 0) if (retval == 0)
goto eio; goto eio;
if (i2c_debug) if (i2c_debug) {
{
if (!(ctrl & I2C_NOSTOP)) if (!(ctrl & I2C_NOSTOP))
printk(" >\n"); printk(" >\n");
} }
...@@ -152,8 +150,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -152,8 +150,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
if (retval == 0) if (retval == 0)
goto eio; goto eio;
if (i2c_debug) if (i2c_debug) {
{
dprintk(1, " %02x", msg->buf[cnt]); dprintk(1, " %02x", msg->buf[cnt]);
if (!(ctrl & I2C_NOSTOP)) if (!(ctrl & I2C_NOSTOP))
dprintk(1, " >\n"); dprintk(1, " >\n");
...@@ -162,22 +159,22 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -162,22 +159,22 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
return msg->len; return msg->len;
eio: eio:
retval = -EIO; retval = -EIO;
err: err:
if (i2c_debug) if (i2c_debug)
printk(KERN_ERR " ERR: %d\n", retval); printk(KERN_ERR " ERR: %d\n", retval);
return retval; return retval;
} }
static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg, int joined) static int i2c_readbytes(struct i2c_adapter *i2c_adap,
const struct i2c_msg *msg, int joined)
{ {
struct cx25821_i2c *bus = i2c_adap->algo_data; struct cx25821_i2c *bus = i2c_adap->algo_data;
struct cx25821_dev *dev = bus->dev; struct cx25821_dev *dev = bus->dev;
u32 ctrl, cnt; u32 ctrl, cnt;
int retval; int retval;
if (i2c_debug && !joined) if (i2c_debug && !joined)
dprintk(1, "6-%s(msg->len=%d)\n", __func__, msg->len); dprintk(1, "6-%s(msg->len=%d)\n", __func__, msg->len);
...@@ -190,7 +187,6 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -190,7 +187,6 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
if (!i2c_slave_did_ack(i2c_adap)) if (!i2c_slave_did_ack(i2c_adap))
return -EIO; return -EIO;
dprintk(1, "%s() returns 0\n", __func__); dprintk(1, "%s() returns 0\n", __func__);
return 0; return 0;
} }
...@@ -209,7 +205,6 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -209,7 +205,6 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
if (cnt < msg->len - 1) if (cnt < msg->len - 1)
ctrl |= I2C_NOSTOP | I2C_EXTEND; ctrl |= I2C_NOSTOP | I2C_EXTEND;
cx_write(bus->reg_addr, msg->addr << 25); cx_write(bus->reg_addr, msg->addr << 25);
cx_write(bus->reg_ctrl, ctrl); cx_write(bus->reg_ctrl, ctrl);
...@@ -228,9 +223,9 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg ...@@ -228,9 +223,9 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, const struct i2c_msg *msg
} }
return msg->len; return msg->len;
eio: eio:
retval = -EIO; retval = -EIO;
err: err:
if (i2c_debug) if (i2c_debug)
printk(KERN_ERR " ERR: %d\n", retval); printk(KERN_ERR " ERR: %d\n", retval);
return retval; return retval;
...@@ -244,29 +239,24 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num) ...@@ -244,29 +239,24 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num)
dprintk(1, "%s(num = %d)\n", __func__, num); dprintk(1, "%s(num = %d)\n", __func__, num);
for (i = 0 ; i < num; i++) for (i = 0; i < num; i++) {
{
dprintk(1, "%s(num = %d) addr = 0x%02x len = 0x%x\n", dprintk(1, "%s(num = %d) addr = 0x%02x len = 0x%x\n",
__func__, num, msgs[i].addr, msgs[i].len); __func__, num, msgs[i].addr, msgs[i].len);
if (msgs[i].flags & I2C_M_RD) if (msgs[i].flags & I2C_M_RD) {
{
/* read */ /* read */
retval = i2c_readbytes(i2c_adap, &msgs[i], 0); retval = i2c_readbytes(i2c_adap, &msgs[i], 0);
} } else if (i + 1 < num && (msgs[i + 1].flags & I2C_M_RD) &&
else if (i + 1 < num && (msgs[i + 1].flags & I2C_M_RD) && msgs[i].addr == msgs[i + 1].addr) {
msgs[i].addr == msgs[i + 1].addr)
{
/* write then read from same address */ /* write then read from same address */
retval = i2c_sendbytes(i2c_adap, &msgs[i], msgs[i + 1].len); retval =
i2c_sendbytes(i2c_adap, &msgs[i], msgs[i + 1].len);
if (retval < 0) if (retval < 0)
goto err; goto err;
i++; i++;
retval = i2c_readbytes(i2c_adap, &msgs[i], 1); retval = i2c_readbytes(i2c_adap, &msgs[i], 1);
} } else {
else
{
/* write */ /* write */
retval = i2c_sendbytes(i2c_adap, &msgs[i], 0); retval = i2c_sendbytes(i2c_adap, &msgs[i], 0);
} }
...@@ -276,35 +266,33 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num) ...@@ -276,35 +266,33 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num)
} }
return num; return num;
err: err:
return retval; return retval;
} }
static u32 cx25821_functionality(struct i2c_adapter *adap) static u32 cx25821_functionality(struct i2c_adapter *adap)
{ {
return I2C_FUNC_SMBUS_EMUL | return I2C_FUNC_SMBUS_EMUL |
I2C_FUNC_I2C | I2C_FUNC_I2C |
I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_WORD_DATA |
I2C_FUNC_SMBUS_READ_WORD_DATA | I2C_FUNC_SMBUS_READ_WORD_DATA | I2C_FUNC_SMBUS_WRITE_WORD_DATA;
I2C_FUNC_SMBUS_WRITE_WORD_DATA;
} }
static struct i2c_algorithm cx25821_i2c_algo_template = { static struct i2c_algorithm cx25821_i2c_algo_template = {
.master_xfer = i2c_xfer, .master_xfer = i2c_xfer,
.functionality = cx25821_functionality, .functionality = cx25821_functionality,
}; };
static struct i2c_adapter cx25821_i2c_adap_template = { static struct i2c_adapter cx25821_i2c_adap_template = {
.name = "cx25821", .name = "cx25821",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.id = I2C_HW_B_CX25821, .id = I2C_HW_B_CX25821,
.algo = &cx25821_i2c_algo_template, .algo = &cx25821_i2c_algo_template,
}; };
static struct i2c_client cx25821_i2c_client_template = { static struct i2c_client cx25821_i2c_client_template = {
.name = "cx25821 internal", .name = "cx25821 internal",
}; };
/* init + register i2c algo-bit adapter */ /* init + register i2c algo-bit adapter */
...@@ -326,14 +314,14 @@ int cx25821_i2c_register(struct cx25821_i2c *bus) ...@@ -326,14 +314,14 @@ int cx25821_i2c_register(struct cx25821_i2c *bus)
strlcpy(bus->i2c_adap.name, bus->dev->name, sizeof(bus->i2c_adap.name)); strlcpy(bus->i2c_adap.name, bus->dev->name, sizeof(bus->i2c_adap.name));
bus->i2c_algo.data = bus; bus->i2c_algo.data = bus;
bus->i2c_adap.algo_data = bus; bus->i2c_adap.algo_data = bus;
i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev); i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev);
i2c_add_adapter(&bus->i2c_adap); i2c_add_adapter(&bus->i2c_adap);
bus->i2c_client.adapter = &bus->i2c_adap; bus->i2c_client.adapter = &bus->i2c_adap;
//set up the I2c //set up the I2c
bus->i2c_client.addr = (0x88>>1); bus->i2c_client.addr = (0x88 >> 1);
return bus->i2c_rc; return bus->i2c_rc;
} }
...@@ -367,71 +355,66 @@ void cx25821_av_clk(struct cx25821_dev *dev, int enable) ...@@ -367,71 +355,66 @@ void cx25821_av_clk(struct cx25821_dev *dev, int enable)
i2c_xfer(&dev->i2c_bus[0].i2c_adap, &msg, 1); i2c_xfer(&dev->i2c_bus[0].i2c_adap, &msg, 1);
} }
int cx25821_i2c_read(struct cx25821_i2c *bus, u16 reg_addr, int *value) int cx25821_i2c_read(struct cx25821_i2c *bus, u16 reg_addr, int *value)
{ {
struct i2c_client *client = &bus->i2c_client; struct i2c_client *client = &bus->i2c_client;
int retval = 0; int retval = 0;
int v = 0; int v = 0;
u8 addr[2] = {0, 0}; u8 addr[2] = { 0, 0 };
u8 buf[4] = {0,0,0,0}; u8 buf[4] = { 0, 0, 0, 0 };
struct i2c_msg msgs[2]={
{
.addr = client->addr,
.flags = 0,
.len = 2,
.buf = addr,
}, {
.addr = client->addr,
.flags = I2C_M_RD,
.len = 4,
.buf = buf,
}
};
addr[0] = (reg_addr>>8);
addr[1] = (reg_addr & 0xff);
msgs[0].addr = 0x44;
msgs[1].addr = 0x44;
retval = i2c_xfer(client->adapter, msgs, 2);
v = (buf[3]<<24) | (buf[2]<<16) | (buf[1]<<8) | buf[0];
*value = v;
return v;
}
struct i2c_msg msgs[2] = {
{
.addr = client->addr,
.flags = 0,
.len = 2,
.buf = addr,
}, {
.addr = client->addr,
.flags = I2C_M_RD,
.len = 4,
.buf = buf,
}
};
addr[0] = (reg_addr >> 8);
addr[1] = (reg_addr & 0xff);
msgs[0].addr = 0x44;
msgs[1].addr = 0x44;
retval = i2c_xfer(client->adapter, msgs, 2);
v = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
*value = v;
return v;
}
int cx25821_i2c_write(struct cx25821_i2c *bus, u16 reg_addr, int value) int cx25821_i2c_write(struct cx25821_i2c *bus, u16 reg_addr, int value)
{ {
struct i2c_client *client = &bus->i2c_client; struct i2c_client *client = &bus->i2c_client;
int retval = 0; int retval = 0;
u8 buf[6] = {0, 0, 0, 0, 0, 0}; u8 buf[6] = { 0, 0, 0, 0, 0, 0 };
struct i2c_msg msgs[1]={ struct i2c_msg msgs[1] = {
{ {
.addr = client->addr, .addr = client->addr,
.flags = 0, .flags = 0,
.len = 6, .len = 6,
.buf = buf, .buf = buf,
} }
}; };
buf[0] = reg_addr >> 8;
buf[0] = reg_addr>>8; buf[1] = reg_addr & 0xff;
buf[1] = reg_addr & 0xff; buf[5] = (value >> 24) & 0xff;
buf[5] = (value>>24) & 0xff; buf[4] = (value >> 16) & 0xff;
buf[4] = (value>>16) & 0xff; buf[3] = (value >> 8) & 0xff;
buf[3] = (value>>8) & 0xff; buf[2] = value & 0xff;
buf[2] = value & 0xff; client->flags = 0;
client->flags = 0; msgs[0].addr = 0x44;
msgs[0].addr = 0x44;
retval = i2c_xfer(client->adapter, msgs, 1);
retval = i2c_xfer(client->adapter, msgs, 1);
return retval;
}
return retval;
}
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef _MEDUSA_DEF_H_ #ifndef _MEDUSA_DEF_H_
#define _MEDUSA_DEF_H_ #define _MEDUSA_DEF_H_
// Video deocder that we supported // Video deocder that we supported
#define VDEC_A 0 #define VDEC_A 0
#define VDEC_B 1 #define VDEC_B 1
#define VDEC_C 2 #define VDEC_C 2
#define VDEC_D 3 #define VDEC_D 3
#define VDEC_E 4 #define VDEC_E 4
#define VDEC_F 5 #define VDEC_F 5
#define VDEC_G 6 #define VDEC_G 6
#define VDEC_H 7 #define VDEC_H 7
//#define AUTO_SWITCH_BIT[] = { 8, 9, 10, 11, 12, 13, 14, 15 }; //#define AUTO_SWITCH_BIT[] = { 8, 9, 10, 11, 12, 13, 14, 15 };
// The following bit position enables automatic source switching for decoder A-H. // The following bit position enables automatic source switching for decoder A-H.
// Display index per camera. // Display index per camera.
//#define VDEC_INDEX[] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7}; //#define VDEC_INDEX[] = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7};
// Select input bit to video decoder A-H. // Select input bit to video decoder A-H.
//#define CH_SRC_SEL_BIT[] = {24, 25, 26, 27, 28, 29, 30, 31}; //#define CH_SRC_SEL_BIT[] = {24, 25, 26, 27, 28, 29, 30, 31};
// end of display sequence // end of display sequence
#define END_OF_SEQ 0xF; #define END_OF_SEQ 0xF;
// registry string size // registry string size
#define MAX_REGISTRY_SZ 40; #define MAX_REGISTRY_SZ 40;
#endif #endif
/* /*
* Driver for the Conexant CX25821 PCIe bridge * Driver for the Conexant CX25821 PCIe bridge
* *
* Copyright (C) 2009 Conexant Systems Inc. * Copyright (C) 2009 Conexant Systems Inc.
* Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com> * Authors <shu.lin@conexant.com>, <hiep.huynh@conexant.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* *
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef _MEDUSA_VIDEO_H #ifndef _MEDUSA_VIDEO_H
#define _MEDUSA_VIDEO_H #define _MEDUSA_VIDEO_H
#include "cx25821-medusa-defines.h"
#include "cx25821-medusa-defines.h"
// Color control constants // Color control constants
#define VIDEO_PROCAMP_MIN 0 #define VIDEO_PROCAMP_MIN 0
...@@ -41,11 +40,10 @@ ...@@ -41,11 +40,10 @@
#define CONTRAST_DEFAULT 5000 #define CONTRAST_DEFAULT 5000
#define HUE_DEFAULT 5000 #define HUE_DEFAULT 5000
unsigned short _num_decoders;
unsigned short _num_cameras;
unsigned short _num_decoders; unsigned int _video_standard;
unsigned short _num_cameras; int _display_field_cnt[MAX_DECODERS];
unsigned int _video_standard;
int _display_field_cnt[MAX_DECODERS];
#endif #endif
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册