V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
/*
I2C functions
Copyright ( C ) 2003 - 2004 Kevin Thayer < nufan_wfk at yahoo . com >
Copyright ( C ) 2005 - 2007 Hans Verkuil < hverkuil @ xs4all . nl >
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 . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/*
This file includes an i2c implementation that was reverse engineered
from the Hauppauge windows driver . Older ivtv versions used i2c - algo - bit ,
which whilst fine under most circumstances , had trouble with the Zilog
CPU on the PVR - 150 which handles IR functions ( occasional inability to
communicate with the chip until it was reset ) and also with the i2c
bus being completely unreachable when multiple PVR cards were present .
The implementation is very similar to i2c - algo - bit , but there are enough
subtle differences that the two are hard to merge . The general strategy
employed by i2c - algo - bit is to use udelay ( ) to implement the timing
when putting out bits on the scl / sda lines . The general strategy taken
here is to poll the lines for state changes ( see ivtv_waitscl and
ivtv_waitsda ) . In addition there are small delays at various locations
which poll the SCL line 5 times ( ivtv_scldelay ) . I would guess that
since this is memory mapped I / O that the length of those delays is tied
to the PCI bus clock . There is some extra code to do with recovery
and retries . Since it is not known what causes the actual i2c problems
in the first place , the only goal if one was to attempt to use
i2c - algo - bit would be to try to make it follow the same code path .
This would be a lot of work , and I ' m also not convinced that it would
provide a generic benefit to i2c - algo - bit . Therefore consider this
an engineering solution - - not pretty , but it works .
Some more general comments about what we are doing :
The i2c bus is a 2 wire serial bus , with clock ( SCL ) and data ( SDA )
lines . To communicate on the bus ( as a master , we don ' t act as a slave ) ,
we first initiate a start condition ( ivtv_start ) . We then write the
address of the device that we want to communicate with , along with a flag
that indicates whether this is a read or a write . The slave then issues
an ACK signal ( ivtv_ack ) , which tells us that it is ready for reading /
writing . We then proceed with reading or writing ( ivtv_read / ivtv_write ) ,
and finally issue a stop condition ( ivtv_stop ) to make the bus available
to other masters .
There is an additional form of transaction where a write may be
immediately followed by a read . In this case , there is no intervening
stop condition . ( Only the msp3400 chip uses this method of data transfer ) .
*/
# include "ivtv-driver.h"
# include "ivtv-cards.h"
# include "ivtv-gpio.h"
2007-03-10 06:54:58 -03:00
# include "ivtv-i2c.h"
2010-08-06 10:53:19 -03:00
# include <media/cx25840.h>
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
/* i2c implementation for cx23415/6 chip, ivtv project.
* Author : Kevin Thayer ( nufan_wfk at yahoo . com )
*/
/* i2c stuff */
# define IVTV_REG_I2C_SETSCL_OFFSET 0x7000
# define IVTV_REG_I2C_SETSDA_OFFSET 0x7004
# define IVTV_REG_I2C_GETSCL_OFFSET 0x7008
# define IVTV_REG_I2C_GETSDA_OFFSET 0x700c
# define IVTV_CS53L32A_I2C_ADDR 0x11
2007-10-30 05:50:03 -03:00
# define IVTV_M52790_I2C_ADDR 0x48
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
# define IVTV_CX25840_I2C_ADDR 0x44
# define IVTV_SAA7115_I2C_ADDR 0x21
# define IVTV_SAA7127_I2C_ADDR 0x44
# define IVTV_SAA717x_I2C_ADDR 0x21
# define IVTV_MSP3400_I2C_ADDR 0x40
# define IVTV_HAUPPAUGE_I2C_ADDR 0x50
# define IVTV_WM8739_I2C_ADDR 0x1a
# define IVTV_WM8775_I2C_ADDR 0x1b
# define IVTV_TEA5767_I2C_ADDR 0x60
# define IVTV_UPD64031A_I2C_ADDR 0x12
# define IVTV_UPD64083_I2C_ADDR 0x5c
2007-12-07 21:01:15 -03:00
# define IVTV_VP27SMPX_I2C_ADDR 0x5b
# define IVTV_M52790_I2C_ADDR 0x48
2009-11-21 12:52:34 -03:00
# define IVTV_AVERMEDIA_IR_RX_I2C_ADDR 0x40
2009-11-21 16:19:27 -03:00
# define IVTV_HAUP_EXT_IR_RX_I2C_ADDR 0x1a
# define IVTV_HAUP_INT_IR_RX_I2C_ADDR 0x18
# define IVTV_Z8F0811_IR_TX_I2C_ADDR 0x70
# define IVTV_Z8F0811_IR_RX_I2C_ADDR 0x71
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
# define IVTV_ADAPTEC_IR_ADDR 0x6b
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
2007-12-07 21:01:15 -03:00
/* This array should match the IVTV_HW_ defines */
static const u8 hw_addrs [ ] = {
IVTV_CX25840_I2C_ADDR ,
IVTV_SAA7115_I2C_ADDR ,
IVTV_SAA7127_I2C_ADDR ,
IVTV_MSP3400_I2C_ADDR ,
0 ,
IVTV_WM8775_I2C_ADDR ,
IVTV_CS53L32A_I2C_ADDR ,
0 ,
IVTV_SAA7115_I2C_ADDR ,
IVTV_UPD64031A_I2C_ADDR ,
IVTV_UPD64083_I2C_ADDR ,
IVTV_SAA717x_I2C_ADDR ,
IVTV_WM8739_I2C_ADDR ,
IVTV_VP27SMPX_I2C_ADDR ,
IVTV_M52790_I2C_ADDR ,
2009-11-21 12:52:34 -03:00
0 , /* IVTV_HW_GPIO dummy driver ID */
2009-11-21 16:19:27 -03:00
IVTV_AVERMEDIA_IR_RX_I2C_ADDR , /* IVTV_HW_I2C_IR_RX_AVER */
IVTV_HAUP_EXT_IR_RX_I2C_ADDR , /* IVTV_HW_I2C_IR_RX_HAUP_EXT */
IVTV_HAUP_INT_IR_RX_I2C_ADDR , /* IVTV_HW_I2C_IR_RX_HAUP_INT */
IVTV_Z8F0811_IR_TX_I2C_ADDR , /* IVTV_HW_Z8F0811_IR_TX_HAUP */
IVTV_Z8F0811_IR_RX_I2C_ADDR , /* IVTV_HW_Z8F0811_IR_RX_HAUP */
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
IVTV_ADAPTEC_IR_ADDR , /* IVTV_HW_I2C_IR_RX_ADAPTEC */
2007-12-07 21:01:15 -03:00
} ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
/* This array should match the IVTV_HW_ defines */
2008-05-18 20:49:40 +02:00
static const char * const hw_devicenames [ ] = {
2007-12-07 21:01:15 -03:00
" cx25840 " ,
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
" saa7115 " ,
2008-07-17 13:18:31 -03:00
" saa7127_auto " , /* saa7127 or saa7129 */
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
" msp3400 " ,
" tuner " ,
" wm8775 " ,
" cs53l32a " ,
" tveeprom " ,
2008-05-18 20:49:40 +02:00
" saa7114 " ,
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
" upd64031a " ,
" upd64083 " ,
" saa717x " ,
" wm8739 " ,
2007-07-27 06:56:50 -03:00
" vp27smpx " ,
2007-10-30 05:50:03 -03:00
" m52790 " ,
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
" gpio " ,
2009-11-21 16:19:27 -03:00
" ir_video " , /* IVTV_HW_I2C_IR_RX_AVER */
" ir_video " , /* IVTV_HW_I2C_IR_RX_HAUP_EXT */
" ir_video " , /* IVTV_HW_I2C_IR_RX_HAUP_INT */
" ir_tx_z8f0811_haup " , /* IVTV_HW_Z8F0811_IR_TX_HAUP */
" ir_rx_z8f0811_haup " , /* IVTV_HW_Z8F0811_IR_RX_HAUP */
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
" ir_video " , /* IVTV_HW_I2C_IR_RX_ADAPTEC */
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
} ;
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
static int get_key_adaptec ( struct IR_i2c * ir , u32 * ir_key , u32 * ir_raw )
{
unsigned char keybuf [ 4 ] ;
keybuf [ 0 ] = 0x00 ;
i2c_master_send ( ir - > c , keybuf , 1 ) ;
/* poll IR chip */
if ( i2c_master_recv ( ir - > c , keybuf , sizeof ( keybuf ) ) ! = sizeof ( keybuf ) ) {
return 0 ;
}
/* key pressed ? */
if ( keybuf [ 2 ] = = 0xff )
return 0 ;
/* remove repeat bit */
keybuf [ 2 ] & = 0x7f ;
keybuf [ 3 ] | = 0x80 ;
2010-12-30 11:58:37 -03:00
* ir_key = keybuf [ 3 ] | keybuf [ 2 ] < < 8 | keybuf [ 1 ] < < 16 | keybuf [ 0 ] < < 24 ;
* ir_raw = * ir_key ;
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
return 1 ;
}
2009-11-21 12:52:34 -03:00
static int ivtv_i2c_new_ir ( struct ivtv * itv , u32 hw , const char * type , u8 addr )
{
struct i2c_board_info info ;
struct i2c_adapter * adap = & itv - > i2c_adap ;
struct IR_i2c_init_data * init_data = & itv - > ir_i2c_init_data ;
unsigned short addr_list [ 2 ] = { addr , I2C_CLIENT_END } ;
2009-11-21 16:19:27 -03:00
/* Only allow one IR transmitter to be registered per board */
if ( hw & IVTV_HW_IR_TX_ANY ) {
if ( itv - > hw_flags & IVTV_HW_IR_TX_ANY )
return - 1 ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , type , I2C_NAME_SIZE ) ;
2010-08-11 18:20:56 +02:00
return i2c_new_probed_device ( adap , & info , addr_list , NULL )
= = NULL ? - 1 : 0 ;
2009-11-21 16:19:27 -03:00
}
/* Only allow one IR receiver to be registered per board */
if ( itv - > hw_flags & IVTV_HW_IR_RX_ANY )
return - 1 ;
2009-11-21 12:52:34 -03:00
/* Our default information for ir-kbd-i2c.c to use */
switch ( hw ) {
case IVTV_HW_I2C_IR_RX_AVER :
2010-04-02 20:01:00 -03:00
init_data - > ir_codes = RC_MAP_AVERMEDIA_CARDBUS ;
2009-11-21 12:52:34 -03:00
init_data - > internal_get_key_func =
IR_KBD_GET_KEY_AVERMEDIA_CARDBUS ;
2010-11-17 14:20:52 -03:00
init_data - > type = RC_TYPE_OTHER ;
2009-11-21 12:52:34 -03:00
init_data - > name = " AVerMedia AVerTV card " ;
break ;
2009-11-21 16:19:27 -03:00
case IVTV_HW_I2C_IR_RX_HAUP_EXT :
case IVTV_HW_I2C_IR_RX_HAUP_INT :
2011-01-24 22:23:08 -03:00
init_data - > ir_codes = RC_MAP_HAUPPAUGE ;
2009-11-21 16:19:27 -03:00
init_data - > internal_get_key_func = IR_KBD_GET_KEY_HAUP ;
2010-11-17 14:20:52 -03:00
init_data - > type = RC_TYPE_RC5 ;
2009-11-21 16:19:27 -03:00
init_data - > name = itv - > card_name ;
break ;
case IVTV_HW_Z8F0811_IR_RX_HAUP :
/* Default to grey remote */
2011-01-24 12:18:48 -03:00
init_data - > ir_codes = RC_MAP_HAUPPAUGE ;
2009-11-21 16:19:27 -03:00
init_data - > internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR ;
2010-11-17 14:20:52 -03:00
init_data - > type = RC_TYPE_RC5 ;
2009-11-21 16:19:27 -03:00
init_data - > name = itv - > card_name ;
break ;
[media] ivtv: Add Adaptec Remote Controller
lirc-i2c implements a get key logic for the Adaptec Remote
Controller, at address 0x6b. The only driver that seems to have
an Adaptec device is ivtv:
$ git grep -i adaptec drivers/media
drivers/media/video/cs53l32a.c: * cs53l32a (Adaptec AVC-2010 and AVC-2410) i2c ivtv driver.
drivers/media/video/cs53l32a.c: * Audio source switching for Adaptec AVC-2410 added by Trev Jackson
drivers/media/video/cs53l32a.c: /* Set cs53l32a internal register for Adaptec 2010/2410 setup */
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2410 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2410",
drivers/media/video/ivtv/ivtv-cards.c:/* Adaptec VideOh! AVC-2010 card */
drivers/media/video/ivtv/ivtv-cards.c: { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
drivers/media/video/ivtv/ivtv-cards.c: .name = "Adaptec VideOh! AVC-2010",
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */
drivers/media/video/ivtv/ivtv-cards.h:#define IVTV_PCI_ID_ADAPTEC 0x9005
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 8 = Adaptec AVC-2410\n"
drivers/media/video/ivtv/ivtv-driver.c: "\t\t\t 9 = Adaptec AVC-2010\n"
drivers/media/video/ivtv/ivtv-i2c.c: 0x6b, /* Adaptec IR */
There are two Adaptec cards defined there, but AVC-2010 doesn't have a
remote controller. So, the logic at lirc_i2c seems to be for Adaptec AVC-2410.
As we'll remove lirc_i2c from kernel, move the getkey code to ivtv driver, and
use it for AVC-2410.
Reviewed-by: Andy Walls <awalls@md.metrocast.net>
Acked-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-30 08:31:10 -03:00
case IVTV_HW_I2C_IR_RX_ADAPTEC :
init_data - > get_key = get_key_adaptec ;
init_data - > name = itv - > card_name ;
/* FIXME: The protocol and RC_MAP needs to be corrected */
init_data - > ir_codes = RC_MAP_EMPTY ;
init_data - > type = RC_TYPE_UNKNOWN ;
break ;
2009-11-21 12:52:34 -03:00
}
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
info . platform_data = init_data ;
strlcpy ( info . type , type , I2C_NAME_SIZE ) ;
2010-08-11 18:20:56 +02:00
return i2c_new_probed_device ( adap , & info , addr_list , NULL ) = = NULL ?
- 1 : 0 ;
2009-11-21 12:52:34 -03:00
}
2009-11-21 11:41:33 -03:00
/* Instantiate the IR receiver device using probing -- undesirable */
struct i2c_client * ivtv_i2c_new_ir_legacy ( struct ivtv * itv )
{
struct i2c_board_info info ;
/*
* The external IR receiver is at i2c address 0x34 .
* The internal IR receiver is at i2c address 0x30 .
*
* In theory , both can be fitted , and Hauppauge suggests an external
* overrides an internal . That ' s why we probe 0x1a ( ~ 0x34 ) first . CB
*
* Some of these addresses we probe may collide with other i2c address
* allocations , so this function must be called after all other i2c
* devices we care about are registered .
*/
const unsigned short addr_list [ ] = {
0x1a , /* Hauppauge IR external - collides with WM8739 */
0x18 , /* Hauppauge IR internal */
I2C_CLIENT_END
} ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , " ir_video " , I2C_NAME_SIZE ) ;
2010-08-11 18:20:56 +02:00
return i2c_new_probed_device ( & itv - > i2c_adap , & info , addr_list , NULL ) ;
2009-11-21 11:41:33 -03:00
}
2007-12-07 21:01:15 -03:00
int ivtv_i2c_register ( struct ivtv * itv , unsigned idx )
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
{
2008-11-29 19:38:23 -03:00
struct v4l2_subdev * sd ;
struct i2c_adapter * adap = & itv - > i2c_adap ;
const char * type = hw_devicenames [ idx ] ;
u32 hw = 1 < < idx ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
2008-11-29 19:38:23 -03:00
if ( idx > = ARRAY_SIZE ( hw_addrs ) )
2007-12-07 21:01:15 -03:00
return - 1 ;
2008-11-29 19:38:23 -03:00
if ( hw = = IVTV_HW_TUNER ) {
/* special tuner handling */
2010-09-24 10:16:44 -03:00
sd = v4l2_i2c_new_subdev ( & itv - > v4l2_dev , adap , type , 0 ,
itv - > card_i2c - > radio ) ;
2008-11-29 19:38:23 -03:00
if ( sd )
sd - > grp_id = 1 < < idx ;
2010-09-24 10:16:44 -03:00
sd = v4l2_i2c_new_subdev ( & itv - > v4l2_dev , adap , type , 0 ,
itv - > card_i2c - > demod ) ;
2008-11-29 19:38:23 -03:00
if ( sd )
sd - > grp_id = 1 < < idx ;
2010-09-24 10:16:44 -03:00
sd = v4l2_i2c_new_subdev ( & itv - > v4l2_dev , adap , type , 0 ,
itv - > card_i2c - > tv ) ;
2008-11-29 19:38:23 -03:00
if ( sd )
sd - > grp_id = 1 < < idx ;
return sd ? 0 : - 1 ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
}
2009-11-21 12:52:34 -03:00
if ( hw & IVTV_HW_IR_ANY )
return ivtv_i2c_new_ir ( itv , hw , type , hw_addrs [ idx ] ) ;
/* Is it not an I2C device or one we do not wish to register? */
2008-11-29 19:38:23 -03:00
if ( ! hw_addrs [ idx ] )
return - 1 ;
2009-11-21 12:52:34 -03:00
/* It's an I2C device other than an analog tuner or IR chip */
2008-11-29 19:38:23 -03:00
if ( hw = = IVTV_HW_UPD64031A | | hw = = IVTV_HW_UPD6408X ) {
2009-08-10 02:49:08 -03:00
sd = v4l2_i2c_new_subdev ( & itv - > v4l2_dev ,
2010-09-24 10:16:44 -03:00
adap , type , 0 , I2C_ADDRS ( hw_addrs [ idx ] ) ) ;
2010-08-06 10:53:19 -03:00
} else if ( hw = = IVTV_HW_CX25840 ) {
struct cx25840_platform_data pdata ;
2011-01-08 07:08:02 -03:00
struct i2c_board_info cx25840_info = {
. type = " cx25840 " ,
. addr = hw_addrs [ idx ] ,
. platform_data = & pdata ,
} ;
2010-08-06 10:53:19 -03:00
pdata . pvr150_workaround = itv - > pvr150_workaround ;
2011-01-08 07:08:02 -03:00
sd = v4l2_i2c_new_subdev_board ( & itv - > v4l2_dev , adap ,
& cx25840_info , NULL ) ;
2008-11-29 19:38:23 -03:00
} else {
2009-04-01 03:57:53 -03:00
sd = v4l2_i2c_new_subdev ( & itv - > v4l2_dev ,
2010-09-24 10:16:44 -03:00
adap , type , hw_addrs [ idx ] , NULL ) ;
2007-12-07 21:01:15 -03:00
}
2008-11-29 19:38:23 -03:00
if ( sd )
sd - > grp_id = 1 < < idx ;
return sd ? 0 : - 1 ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
}
2008-11-29 19:38:23 -03:00
struct v4l2_subdev * ivtv_find_hw ( struct ivtv * itv , u32 hw )
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
{
2008-11-29 19:38:23 -03:00
struct v4l2_subdev * result = NULL ;
struct v4l2_subdev * sd ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
2009-02-07 07:02:27 -03:00
spin_lock ( & itv - > v4l2_dev . lock ) ;
v4l2_device_for_each_subdev ( sd , & itv - > v4l2_dev ) {
2008-11-29 19:38:23 -03:00
if ( sd - > grp_id = = hw ) {
result = sd ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
break ;
}
}
2009-02-07 07:02:27 -03:00
spin_unlock ( & itv - > v4l2_dev . lock ) ;
2008-11-29 19:38:23 -03:00
return result ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
}
/* Set the serial clock line to the desired state */
static void ivtv_setscl ( struct ivtv * itv , int state )
{
/* write them out */
/* write bits are inverted */
write_reg ( ~ state , IVTV_REG_I2C_SETSCL_OFFSET ) ;
}
/* Set the serial data line to the desired state */
static void ivtv_setsda ( struct ivtv * itv , int state )
{
/* write them out */
/* write bits are inverted */
write_reg ( ~ state & 1 , IVTV_REG_I2C_SETSDA_OFFSET ) ;
}
/* Read the serial clock line */
static int ivtv_getscl ( struct ivtv * itv )
{
return read_reg ( IVTV_REG_I2C_GETSCL_OFFSET ) & 1 ;
}
/* Read the serial data line */
static int ivtv_getsda ( struct ivtv * itv )
{
return read_reg ( IVTV_REG_I2C_GETSDA_OFFSET ) & 1 ;
}
/* Implement a short delay by polling the serial clock line */
static void ivtv_scldelay ( struct ivtv * itv )
{
int i ;
for ( i = 0 ; i < 5 ; + + i )
ivtv_getscl ( itv ) ;
}
/* Wait for the serial clock line to become set to a specific value */
static int ivtv_waitscl ( struct ivtv * itv , int val )
{
int i ;
ivtv_scldelay ( itv ) ;
for ( i = 0 ; i < 1000 ; + + i ) {
if ( ivtv_getscl ( itv ) = = val )
return 1 ;
}
return 0 ;
}
/* Wait for the serial data line to become set to a specific value */
static int ivtv_waitsda ( struct ivtv * itv , int val )
{
int i ;
ivtv_scldelay ( itv ) ;
for ( i = 0 ; i < 1000 ; + + i ) {
if ( ivtv_getsda ( itv ) = = val )
return 1 ;
}
return 0 ;
}
/* Wait for the slave to issue an ACK */
static int ivtv_ack ( struct ivtv * itv )
{
int ret = 0 ;
if ( ivtv_getscl ( itv ) = = 1 ) {
2007-07-17 12:47:38 -03:00
IVTV_DEBUG_HI_I2C ( " SCL was high starting an ack \n " ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
ivtv_setscl ( itv , 0 ) ;
if ( ! ivtv_waitscl ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " Could not set SCL low starting an ack \n " ) ;
return - EREMOTEIO ;
}
}
ivtv_setsda ( itv , 1 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 1 ) ;
if ( ! ivtv_waitsda ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " Slave did not ack \n " ) ;
ret = - EREMOTEIO ;
}
ivtv_setscl ( itv , 0 ) ;
if ( ! ivtv_waitscl ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " Failed to set SCL low after ACK \n " ) ;
ret = - EREMOTEIO ;
}
return ret ;
}
/* Write a single byte to the i2c bus and wait for the slave to ACK */
static int ivtv_sendbyte ( struct ivtv * itv , unsigned char byte )
{
int i , bit ;
2007-07-17 12:47:38 -03:00
IVTV_DEBUG_HI_I2C ( " write %x \n " , byte ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
for ( i = 0 ; i < 8 ; + + i , byte < < = 1 ) {
ivtv_setscl ( itv , 0 ) ;
if ( ! ivtv_waitscl ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " Error setting SCL low \n " ) ;
return - EREMOTEIO ;
}
bit = ( byte > > 7 ) & 1 ;
ivtv_setsda ( itv , bit ) ;
if ( ! ivtv_waitsda ( itv , bit ) ) {
IVTV_DEBUG_I2C ( " Error setting SDA \n " ) ;
return - EREMOTEIO ;
}
ivtv_setscl ( itv , 1 ) ;
if ( ! ivtv_waitscl ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " Slave not ready for bit \n " ) ;
return - EREMOTEIO ;
}
}
ivtv_setscl ( itv , 0 ) ;
if ( ! ivtv_waitscl ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " Error setting SCL low \n " ) ;
return - EREMOTEIO ;
}
return ivtv_ack ( itv ) ;
}
/* Read a byte from the i2c bus and send a NACK if applicable (i.e. for the
final byte ) */
static int ivtv_readbyte ( struct ivtv * itv , unsigned char * byte , int nack )
{
int i ;
* byte = 0 ;
ivtv_setsda ( itv , 1 ) ;
ivtv_scldelay ( itv ) ;
for ( i = 0 ; i < 8 ; + + i ) {
ivtv_setscl ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 1 ) ;
if ( ! ivtv_waitscl ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " Error setting SCL high \n " ) ;
return - EREMOTEIO ;
}
* byte = ( ( * byte ) < < 1 ) | ivtv_getsda ( itv ) ;
}
ivtv_setscl ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setsda ( itv , nack ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 1 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
2007-07-17 12:47:38 -03:00
IVTV_DEBUG_HI_I2C ( " read %x \n " , * byte ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
return 0 ;
}
/* Issue a start condition on the i2c bus to alert slaves to prepare for
an address write */
static int ivtv_start ( struct ivtv * itv )
{
int sda ;
sda = ivtv_getsda ( itv ) ;
if ( sda ! = 1 ) {
2007-07-17 12:47:38 -03:00
IVTV_DEBUG_HI_I2C ( " SDA was low at start \n " ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
ivtv_setsda ( itv , 1 ) ;
if ( ! ivtv_waitsda ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " SDA stuck low \n " ) ;
return - EREMOTEIO ;
}
}
if ( ivtv_getscl ( itv ) ! = 1 ) {
ivtv_setscl ( itv , 1 ) ;
if ( ! ivtv_waitscl ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " SCL stuck low at start \n " ) ;
return - EREMOTEIO ;
}
}
ivtv_setsda ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
return 0 ;
}
/* Issue a stop condition on the i2c bus to release it */
static int ivtv_stop ( struct ivtv * itv )
{
int i ;
if ( ivtv_getscl ( itv ) ! = 0 ) {
2007-07-17 12:47:38 -03:00
IVTV_DEBUG_HI_I2C ( " SCL not low when stopping \n " ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
ivtv_setscl ( itv , 0 ) ;
if ( ! ivtv_waitscl ( itv , 0 ) ) {
IVTV_DEBUG_I2C ( " SCL could not be set low \n " ) ;
}
}
ivtv_setsda ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 1 ) ;
if ( ! ivtv_waitscl ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " SCL could not be set high \n " ) ;
return - EREMOTEIO ;
}
ivtv_scldelay ( itv ) ;
ivtv_setsda ( itv , 1 ) ;
if ( ! ivtv_waitsda ( itv , 1 ) ) {
IVTV_DEBUG_I2C ( " resetting I2C \n " ) ;
for ( i = 0 ; i < 16 ; + + i ) {
ivtv_setscl ( itv , 0 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setscl ( itv , 1 ) ;
ivtv_scldelay ( itv ) ;
ivtv_setsda ( itv , 1 ) ;
}
ivtv_waitsda ( itv , 1 ) ;
return - EREMOTEIO ;
}
return 0 ;
}
/* Write a message to the given i2c slave. do_stop may be 0 to prevent
issuing the i2c stop condition ( when following with a read ) */
static int ivtv_write ( struct ivtv * itv , unsigned char addr , unsigned char * data , u32 len , int do_stop )
{
int retry , ret = - EREMOTEIO ;
u32 i ;
for ( retry = 0 ; ret ! = 0 & & retry < 8 ; + + retry ) {
ret = ivtv_start ( itv ) ;
if ( ret = = 0 ) {
ret = ivtv_sendbyte ( itv , addr < < 1 ) ;
for ( i = 0 ; ret = = 0 & & i < len ; + + i )
ret = ivtv_sendbyte ( itv , data [ i ] ) ;
}
if ( ret ! = 0 | | do_stop ) {
ivtv_stop ( itv ) ;
}
}
if ( ret )
IVTV_DEBUG_I2C ( " i2c write to %x failed \n " , addr ) ;
return ret ;
}
/* Read data from the given i2c slave. A stop condition is always issued. */
static int ivtv_read ( struct ivtv * itv , unsigned char addr , unsigned char * data , u32 len )
{
int retry , ret = - EREMOTEIO ;
u32 i ;
for ( retry = 0 ; ret ! = 0 & & retry < 8 ; + + retry ) {
ret = ivtv_start ( itv ) ;
if ( ret = = 0 )
ret = ivtv_sendbyte ( itv , ( addr < < 1 ) | 1 ) ;
for ( i = 0 ; ret = = 0 & & i < len ; + + i ) {
ret = ivtv_readbyte ( itv , & data [ i ] , i = = len - 1 ) ;
}
ivtv_stop ( itv ) ;
}
if ( ret )
IVTV_DEBUG_I2C ( " i2c read from %x failed \n " , addr ) ;
return ret ;
}
/* Kernel i2c transfer implementation. Takes a number of messages to be read
or written . If a read follows a write , this will occur without an
intervening stop condition */
static int ivtv_xfer ( struct i2c_adapter * i2c_adap , struct i2c_msg * msgs , int num )
{
2009-02-07 07:02:27 -03:00
struct v4l2_device * v4l2_dev = i2c_get_adapdata ( i2c_adap ) ;
struct ivtv * itv = to_ivtv ( v4l2_dev ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
int retval ;
int i ;
mutex_lock ( & itv - > i2c_bus_lock ) ;
for ( i = retval = 0 ; retval = = 0 & & i < num ; i + + ) {
if ( msgs [ i ] . flags & I2C_M_RD )
retval = ivtv_read ( itv , msgs [ i ] . addr , msgs [ i ] . buf , msgs [ i ] . len ) ;
else {
/* if followed by a read, don't stop */
int stop = ! ( i + 1 < num & & msgs [ i + 1 ] . flags = = I2C_M_RD ) ;
retval = ivtv_write ( itv , msgs [ i ] . addr , msgs [ i ] . buf , msgs [ i ] . len , stop ) ;
}
}
mutex_unlock ( & itv - > i2c_bus_lock ) ;
return retval ? retval : num ;
}
/* Kernel i2c capabilities */
static u32 ivtv_functionality ( struct i2c_adapter * adap )
{
return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL ;
}
static struct i2c_algorithm ivtv_algo = {
. master_xfer = ivtv_xfer ,
. functionality = ivtv_functionality ,
} ;
/* template for our-bit banger */
static struct i2c_adapter ivtv_i2c_adap_hw_template = {
. name = " ivtv i2c driver " ,
. algo = & ivtv_algo ,
. algo_data = NULL , /* filled from template */
. owner = THIS_MODULE ,
} ;
static void ivtv_setscl_old ( void * data , int state )
{
struct ivtv * itv = ( struct ivtv * ) data ;
if ( state )
itv - > i2c_state | = 0x01 ;
else
itv - > i2c_state & = ~ 0x01 ;
/* write them out */
/* write bits are inverted */
write_reg ( ~ itv - > i2c_state , IVTV_REG_I2C_SETSCL_OFFSET ) ;
}
static void ivtv_setsda_old ( void * data , int state )
{
struct ivtv * itv = ( struct ivtv * ) data ;
if ( state )
itv - > i2c_state | = 0x01 ;
else
itv - > i2c_state & = ~ 0x01 ;
/* write them out */
/* write bits are inverted */
write_reg ( ~ itv - > i2c_state , IVTV_REG_I2C_SETSDA_OFFSET ) ;
}
static int ivtv_getscl_old ( void * data )
{
struct ivtv * itv = ( struct ivtv * ) data ;
return read_reg ( IVTV_REG_I2C_GETSCL_OFFSET ) & 1 ;
}
static int ivtv_getsda_old ( void * data )
{
struct ivtv * itv = ( struct ivtv * ) data ;
return read_reg ( IVTV_REG_I2C_GETSDA_OFFSET ) & 1 ;
}
/* template for i2c-bit-algo */
static struct i2c_adapter ivtv_i2c_adap_template = {
. name = " ivtv i2c driver " ,
. algo = NULL , /* set by i2c-algo-bit */
. algo_data = NULL , /* filled from template */
. owner = THIS_MODULE ,
} ;
2009-11-21 01:47:45 -03:00
# define IVTV_ALGO_BIT_TIMEOUT (2) /* seconds */
2007-08-23 15:45:41 -03:00
static const struct i2c_algo_bit_data ivtv_i2c_algo_template = {
. setsda = ivtv_setsda_old ,
. setscl = ivtv_setscl_old ,
. getsda = ivtv_getsda_old ,
. getscl = ivtv_getscl_old ,
2009-11-21 01:47:45 -03:00
. udelay = IVTV_DEFAULT_I2C_CLOCK_PERIOD / 2 , /* microseconds */
. timeout = IVTV_ALGO_BIT_TIMEOUT * HZ , /* jiffies */
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
} ;
static struct i2c_client ivtv_i2c_client_template = {
2007-03-07 11:28:33 -03:00
. name = " ivtv internal " ,
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
} ;
2009-11-21 11:41:33 -03:00
/* init + register i2c adapter */
2007-12-11 19:23:49 -03:00
int init_ivtv_i2c ( struct ivtv * itv )
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
{
2009-05-13 16:48:50 -03:00
int retval ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
IVTV_DEBUG_I2C ( " i2c init \n " ) ;
2007-12-07 21:01:15 -03:00
/* Sanity checks for the I2C hardware arrays. They must be the
2009-11-21 12:52:34 -03:00
* same size .
2007-12-07 21:01:15 -03:00
*/
2010-09-24 09:58:51 -03:00
if ( ARRAY_SIZE ( hw_devicenames ) ! = ARRAY_SIZE ( hw_addrs ) ) {
2007-12-07 21:01:15 -03:00
IVTV_ERR ( " Mismatched I2C hardware arrays \n " ) ;
return - ENODEV ;
}
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
if ( itv - > options . newi2c > 0 ) {
memcpy ( & itv - > i2c_adap , & ivtv_i2c_adap_hw_template ,
sizeof ( struct i2c_adapter ) ) ;
} else {
memcpy ( & itv - > i2c_adap , & ivtv_i2c_adap_template ,
sizeof ( struct i2c_adapter ) ) ;
memcpy ( & itv - > i2c_algo , & ivtv_i2c_algo_template ,
sizeof ( struct i2c_algo_bit_data ) ) ;
}
2009-11-21 01:47:45 -03:00
itv - > i2c_algo . udelay = itv - > options . i2c_clock_period / 2 ;
2007-12-21 21:33:36 -03:00
itv - > i2c_algo . data = itv ;
itv - > i2c_adap . algo_data = & itv - > i2c_algo ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
sprintf ( itv - > i2c_adap . name + strlen ( itv - > i2c_adap . name ) , " #%d " ,
2008-11-29 19:38:23 -03:00
itv - > instance ) ;
2009-02-07 07:02:27 -03:00
i2c_set_adapdata ( & itv - > i2c_adap , & itv - > v4l2_dev ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
memcpy ( & itv - > i2c_client , & ivtv_i2c_client_template ,
sizeof ( struct i2c_client ) ) ;
itv - > i2c_client . adapter = & itv - > i2c_adap ;
2009-02-07 07:02:27 -03:00
itv - > i2c_adap . dev . parent = & itv - > pdev - > dev ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
IVTV_DEBUG_I2C ( " setting scl and sda to 1 \n " ) ;
ivtv_setscl ( itv , 1 ) ;
ivtv_setsda ( itv , 1 ) ;
if ( itv - > options . newi2c > 0 )
2009-05-13 16:48:50 -03:00
retval = i2c_add_adapter ( & itv - > i2c_adap ) ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
else
2009-05-13 16:48:50 -03:00
retval = i2c_bit_add_bus ( & itv - > i2c_adap ) ;
return retval ;
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
}
2007-10-30 21:23:48 -07:00
void exit_ivtv_i2c ( struct ivtv * itv )
V4L/DVB (5345): ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder
It took three core maintainers, over four years of work, eight new i2c
modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced
VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding
API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac
support from Axel Thimm, (hardware) support from Hauppauge, support and
assistance from the v4l-dvb people and the many, many users of ivtv to
finally make it possible to merge this driver into the kernel.
Thank you all!
Signed-off-by: Kevin Thayer <nufan_wfk@yahoo.com>
Signed-off-by: Chris Kennedy <c@groovy.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: John P Harvey <john.p.harvey@btinternet.com>
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-04-27 12:31:25 -03:00
{
IVTV_DEBUG_I2C ( " i2c exit \n " ) ;
i2c_del_adapter ( & itv - > i2c_adap ) ;
}