Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 138200
b: refs/heads/master
c: 8b2f079
h: refs/heads/master
v: v3
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed Mar 30, 2009
1 parent 61be533 commit 3b451f7
Show file tree
Hide file tree
Showing 7 changed files with 1,921 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 968cf78285ef03672ae514e9ad7a60919eb97551
refs/heads/master: 8b2f079523450fa2d65cbb3f8453820bf1e17533
2 changes: 1 addition & 1 deletion trunk/drivers/media/video/au0828/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
au0828-objs := au0828-core.o au0828-i2c.o au0828-cards.o au0828-dvb.o
au0828-objs := au0828-core.o au0828-i2c.o au0828-cards.o au0828-dvb.o au0828-video.o

obj-$(CONFIG_VIDEO_AU0828) += au0828.o

Expand Down
41 changes: 37 additions & 4 deletions trunk/drivers/media/video/au0828/au0828-cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,18 @@

#include "au0828.h"
#include "au0828-cards.h"
#include "au8522.h"

void hvr950q_cs5340_audio(void *priv, int enable)
{
/* Because the HVR-950q shares an i2s bus between the cs5340 and the
au8522, we need to hold cs5340 in reset when using the au8522 */
struct au0828_dev *dev = priv;
if (enable == 1)
au0828_set(dev, REG_000, 0x10);
else
au0828_clear(dev, REG_000, 0x10);
}

struct au0828_board au0828_boards[] = {
[AU0828_BOARD_UNKNOWN] = {
Expand All @@ -31,6 +43,25 @@ struct au0828_board au0828_boards[] = {
},
[AU0828_BOARD_HAUPPAUGE_HVR950Q] = {
.name = "Hauppauge HVR950Q",
.input = {
{
.type = AU0828_VMUX_TELEVISION,
.vmux = AU8522_COMPOSITE_CH4_SIF,
.amux = AU8522_AUDIO_SIF,
},
{
.type = AU0828_VMUX_COMPOSITE,
.vmux = AU8522_COMPOSITE_CH1,
.amux = AU8522_AUDIO_NONE,
.audio_setup = hvr950q_cs5340_audio,
},
{
.type = AU0828_VMUX_SVIDEO,
.vmux = AU8522_SVIDEO_CH13,
.amux = AU8522_AUDIO_NONE,
.audio_setup = hvr950q_cs5340_audio,
},
},
},
[AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL] = {
.name = "Hauppauge HVR950Q rev xxF8",
Expand Down Expand Up @@ -144,21 +175,23 @@ void au0828_gpio_setup(struct au0828_dev *dev)
* 4 - CS5340
* 5 - AU8522 Demodulator
* 6 - eeprom W/P
* 7 - power supply
* 9 - XC5000 Tuner
*/

/* Into reset */
au0828_write(dev, REG_003, 0x02);
au0828_write(dev, REG_002, 0x88 | 0x20);
au0828_write(dev, REG_002, 0x80 | 0x20 | 0x10);
au0828_write(dev, REG_001, 0x0);
au0828_write(dev, REG_000, 0x0);
msleep(100);

/* Out of reset */
/* Out of reset (leave the cs5340 in reset until needed) */
au0828_write(dev, REG_003, 0x02);
au0828_write(dev, REG_001, 0x02);
au0828_write(dev, REG_002, 0x88 | 0x20);
au0828_write(dev, REG_000, 0x88 | 0x20 | 0x40);
au0828_write(dev, REG_002, 0x80 | 0x20 | 0x10);
au0828_write(dev, REG_000, 0x80 | 0x40 | 0x20);

msleep(250);
break;
case AU0828_BOARD_DVICO_FUSIONHDTV7:
Expand Down
33 changes: 32 additions & 1 deletion trunk/drivers/media/video/au0828/au0828-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
/* Digital TV */
au0828_dvb_unregister(dev);

au0828_analog_unregister(dev);

/* I2C */
au0828_i2c_unregister(dev);

Expand All @@ -162,9 +164,11 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
static int au0828_usb_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{
int ifnum;
int ifnum, i;
struct au0828_dev *dev;
struct usb_device *usbdev = interface_to_usbdev(interface);
struct usb_host_interface *iface_desc;
struct usb_endpoint_descriptor *endpoint;

ifnum = interface->altsetting->desc.bInterfaceNumber;

Expand All @@ -189,6 +193,30 @@ static int au0828_usb_probe(struct usb_interface *interface,

usb_set_intfdata(interface, dev);

/* set au0828 usb interface0 to as5 */
usb_set_interface(usbdev,
interface->cur_altsetting->desc.bInterfaceNumber, 5);

/* Figure out which endpoint has the isoc interface */
iface_desc = interface->cur_altsetting;
for(i = 0; i < iface_desc->desc.bNumEndpoints; i++){
endpoint = &iface_desc->endpoint[i].desc;
if(((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) &&
((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC)){

/* we find our isoc in endpoint */
u16 tmp = le16_to_cpu(endpoint->wMaxPacketSize);
dev->max_pkt_size = (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
dev->isoc_in_endpointaddr = endpoint->bEndpointAddress;
}
}
if(!(dev->isoc_in_endpointaddr)) {
printk("Could not locate isoc endpoint\n");
kfree(dev);
return -ENODEV;
}


/* Power Up the bridge */
au0828_write(dev, REG_600, 1 << 4);

Expand All @@ -201,6 +229,9 @@ static int au0828_usb_probe(struct usb_interface *interface,
/* Setup */
au0828_card_setup(dev);

/* Analog TV */
au0828_analog_register(dev);

/* Digital TV */
au0828_dvb_register(dev);

Expand Down
6 changes: 6 additions & 0 deletions trunk/drivers/media/video/au0828/au0828-reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
#define REG_002 0x002
#define REG_003 0x003

#define AU0828_SENSORCTRL_100 0x100
#define AU0828_SENSORCTRL_VBI_103 0x103

#define REG_200 0x200
#define REG_201 0x201
#define REG_202 0x202
Expand All @@ -35,4 +38,7 @@
#define REG_209 0x209
#define REG_2FF 0x2ff

/* Audio registers */
#define AU0828_AUDIOCTRL_50C 0x50C

#define REG_600 0x600
Loading

0 comments on commit 3b451f7

Please sign in to comment.