Commit 3acf2809 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Linus Torvalds

[PATCH] v4l: 886: renamed common structures to em28xx

- Renamed common structures to em28xx
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e0ec29b7
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include "em28xx.h" #include "em28xx.h"
struct em2820_board em2820_boards[] = { struct em28xx_board em28xx_boards[] = {
[EM2800_BOARD_UNKNOWN] = { [EM2800_BOARD_UNKNOWN] = {
.name = "Unknown EM2800 video grabber", .name = "Unknown EM2800 video grabber",
.is_em2800 = 1, .is_em2800 = 1,
...@@ -42,13 +42,13 @@ struct em2820_board em2820_boards[] = { ...@@ -42,13 +42,13 @@ struct em2820_board em2820_boards[] = {
.norm = VIDEO_MODE_PAL, .norm = VIDEO_MODE_PAL,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -60,13 +60,13 @@ struct em2820_board em2820_boards[] = { ...@@ -60,13 +60,13 @@ struct em2820_board em2820_boards[] = {
.norm = VIDEO_MODE_PAL, .norm = VIDEO_MODE_PAL,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -78,17 +78,17 @@ struct em2820_board em2820_boards[] = { ...@@ -78,17 +78,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_LG_PAL_NEW_TAPC, .tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 2, .vmux = 2,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -100,17 +100,17 @@ struct em2820_board em2820_boards[] = { ...@@ -100,17 +100,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_LG_PAL_NEW_TAPC, .tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 2, .vmux = 2,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -122,15 +122,15 @@ struct em2820_board em2820_boards[] = { ...@@ -122,15 +122,15 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_PHILIPS_FM1236_MK3, .tuner_type = TUNER_PHILIPS_FM1236_MK3,
.tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE, .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_TVP5150, .decoder = EM28XX_TVP5150,
.has_msp34xx = 1, .has_msp34xx = 1,
/*FIXME: S-Video not tested */ /*FIXME: S-Video not tested */
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 0, .vmux = 0,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 2, .vmux = 2,
.amux = 1, .amux = 1,
}}, }},
...@@ -142,17 +142,17 @@ struct em2820_board em2820_boards[] = { ...@@ -142,17 +142,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_LG_PAL_NEW_TAPC, .tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE, .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7114, .decoder = EM28XX_SAA7114,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 4, .vmux = 4,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -165,17 +165,17 @@ struct em2820_board em2820_boards[] = { ...@@ -165,17 +165,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_LG_PAL_NEW_TAPC, .tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 2, .vmux = 2,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -188,17 +188,17 @@ struct em2820_board em2820_boards[] = { ...@@ -188,17 +188,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_LG_PAL_NEW_TAPC, .tuner_type = TUNER_LG_PAL_NEW_TAPC,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 2, .vmux = 2,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -211,17 +211,17 @@ struct em2820_board em2820_boards[] = { ...@@ -211,17 +211,17 @@ struct em2820_board em2820_boards[] = {
.tuner_type = TUNER_PHILIPS_ATSC, .tuner_type = TUNER_PHILIPS_ATSC,
.tda9887_conf = TDA9887_PRESENT, .tda9887_conf = TDA9887_PRESENT,
.has_tuner = 1, .has_tuner = 1,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_TELEVISION, .type = EM28XX_VMUX_TELEVISION,
.vmux = 2, .vmux = 2,
.amux = 0, .amux = 0,
},{ },{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
...@@ -231,22 +231,22 @@ struct em2820_board em2820_boards[] = { ...@@ -231,22 +231,22 @@ struct em2820_board em2820_boards[] = {
.vchannels = 3, .vchannels = 3,
.norm = VIDEO_MODE_PAL, .norm = VIDEO_MODE_PAL,
.has_tuner = 0, .has_tuner = 0,
.decoder = EM2820_SAA7113, .decoder = EM28XX_SAA7113,
.input = {{ .input = {{
.type = EM2820_VMUX_COMPOSITE1, .type = EM28XX_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 0,
.amux = 1, .amux = 1,
},{ },{
.type = EM2820_VMUX_SVIDEO, .type = EM28XX_VMUX_SVIDEO,
.vmux = 9, .vmux = 9,
.amux = 1, .amux = 1,
}}, }},
}, },
}; };
const unsigned int em2820_bcount = ARRAY_SIZE(em2820_boards); const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
/* table of devices that work with this driver */ /* table of devices that work with this driver */
struct usb_device_id em2820_id_table [] = { struct usb_device_id em28xx_id_table [] = {
{ USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_UNKNOWN }, { USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_UNKNOWN },
{ USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_MSI_VOX_USB_2 }, { USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_MSI_VOX_USB_2 },
{ USB_DEVICE(0x0ccd, 0x0036), .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 }, { USB_DEVICE(0x0ccd, 0x0036), .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 },
...@@ -256,7 +256,7 @@ struct usb_device_id em2820_id_table [] = { ...@@ -256,7 +256,7 @@ struct usb_device_id em2820_id_table [] = {
{ }, { },
}; };
void em2820_card_setup(struct em2820 *dev) void em28xx_card_setup(struct em28xx *dev)
{ {
/* request some modules */ /* request some modules */
if (dev->model == EM2820_BOARD_HAUPPAUGE_WINTV_USB_2) { if (dev->model == EM2820_BOARD_HAUPPAUGE_WINTV_USB_2) {
...@@ -274,14 +274,14 @@ void em2820_card_setup(struct em2820 *dev) ...@@ -274,14 +274,14 @@ void em2820_card_setup(struct em2820 *dev)
if (tv.audio_processor == AUDIO_CHIP_MSP34XX) { if (tv.audio_processor == AUDIO_CHIP_MSP34XX) {
dev->has_msp34xx=1; dev->has_msp34xx=1;
} else dev->has_msp34xx=0; } else dev->has_msp34xx=0;
em2820_write_regs_req(dev,0x06,0x00,"\x40",1);// Serial Bus Frequency Select Register em28xx_write_regs_req(dev,0x06,0x00,"\x40",1);// Serial Bus Frequency Select Register
em2820_write_regs_req(dev,0x0f,0x00,"\x87",1);// XCLK Frequency Select Register em28xx_write_regs_req(dev,0x0f,0x00,"\x87",1);// XCLK Frequency Select Register
em2820_write_regs_req(dev,0x88,0x0d,"\xd0",1); em28xx_write_regs_req(dev,0x88,0x0d,"\xd0",1);
} }
} }
EXPORT_SYMBOL(em2820_boards); EXPORT_SYMBOL(em28xx_boards);
EXPORT_SYMBOL(em2820_bcount); EXPORT_SYMBOL(em28xx_bcount);
EXPORT_SYMBOL(em2820_id_table); EXPORT_SYMBOL(em28xx_id_table);
MODULE_DEVICE_TABLE (usb, em2820_id_table); MODULE_DEVICE_TABLE (usb, em28xx_id_table);
/* /*
em2820-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices em28xx-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it> Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
Markus Rechberger <mrechberger@gmail.com> Markus Rechberger <mrechberger@gmail.com>
...@@ -36,7 +36,7 @@ unsigned int core_debug; ...@@ -36,7 +36,7 @@ unsigned int core_debug;
module_param(core_debug,int,0644); module_param(core_debug,int,0644);
MODULE_PARM_DESC(core_debug,"enable debug messages [core]"); MODULE_PARM_DESC(core_debug,"enable debug messages [core]");
#define em2820_coredbg(fmt, arg...) do {\ #define em28xx_coredbg(fmt, arg...) do {\
if (core_debug) \ if (core_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__ , ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
...@@ -45,7 +45,7 @@ unsigned int reg_debug; ...@@ -45,7 +45,7 @@ unsigned int reg_debug;
module_param(reg_debug,int,0644); module_param(reg_debug,int,0644);
MODULE_PARM_DESC(reg_debug,"enable debug messages [URB reg]"); MODULE_PARM_DESC(reg_debug,"enable debug messages [URB reg]");
#define em2820_regdbg(fmt, arg...) do {\ #define em28xx_regdbg(fmt, arg...) do {\
if (reg_debug) \ if (reg_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__ , ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
...@@ -54,12 +54,12 @@ unsigned int isoc_debug; ...@@ -54,12 +54,12 @@ unsigned int isoc_debug;
module_param(isoc_debug,int,0644); module_param(isoc_debug,int,0644);
MODULE_PARM_DESC(isoc_debug,"enable debug messages [isoc transfers]"); MODULE_PARM_DESC(isoc_debug,"enable debug messages [isoc transfers]");
#define em2820_isocdbg(fmt, arg...) do {\ #define em28xx_isocdbg(fmt, arg...) do {\
if (isoc_debug) \ if (isoc_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__ , ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
static int alt = EM2820_PINOUT; static int alt = EM28XX_PINOUT;
module_param(alt, int, 0644); module_param(alt, int, 0644);
MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint"); MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
...@@ -88,7 +88,7 @@ static const char *v4l2_ioctls[] = { ...@@ -88,7 +88,7 @@ static const char *v4l2_ioctls[] = {
}; };
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
void em2820_print_ioctl(char *name, unsigned int cmd) void em28xx_print_ioctl(char *name, unsigned int cmd)
{ {
char *dir; char *dir;
...@@ -159,17 +159,17 @@ static void rvfree(void *mem, size_t size) ...@@ -159,17 +159,17 @@ static void rvfree(void *mem, size_t size)
} }
/* /*
* em2820_request_buffers() * em28xx_request_buffers()
* allocate a number of buffers * allocate a number of buffers
*/ */
u32 em2820_request_buffers(struct em2820 *dev, u32 count) u32 em28xx_request_buffers(struct em28xx *dev, u32 count)
{ {
const size_t imagesize = PAGE_ALIGN(dev->frame_size); /*needs to be page aligned cause the buffers can be mapped individually! */ const size_t imagesize = PAGE_ALIGN(dev->frame_size); /*needs to be page aligned cause the buffers can be mapped individually! */
void *buff = NULL; void *buff = NULL;
u32 i; u32 i;
em2820_coredbg("requested %i buffers with size %i", count, imagesize); em28xx_coredbg("requested %i buffers with size %i", count, imagesize);
if (count > EM2820_NUM_FRAMES) if (count > EM28XX_NUM_FRAMES)
count = EM2820_NUM_FRAMES; count = EM28XX_NUM_FRAMES;
dev->num_frames = count; dev->num_frames = count;
while (dev->num_frames > 0) { while (dev->num_frames > 0) {
...@@ -193,10 +193,10 @@ u32 em2820_request_buffers(struct em2820 *dev, u32 count) ...@@ -193,10 +193,10 @@ u32 em2820_request_buffers(struct em2820 *dev, u32 count)
} }
/* /*
* em2820_queue_unusedframes() * em28xx_queue_unusedframes()
* add all frames that are not currently in use to the inbuffer queue * add all frames that are not currently in use to the inbuffer queue
*/ */
void em2820_queue_unusedframes(struct em2820 *dev) void em28xx_queue_unusedframes(struct em28xx *dev)
{ {
unsigned long lock_flags; unsigned long lock_flags;
u32 i; u32 i;
...@@ -211,10 +211,10 @@ void em2820_queue_unusedframes(struct em2820 *dev) ...@@ -211,10 +211,10 @@ void em2820_queue_unusedframes(struct em2820 *dev)
} }
/* /*
* em2820_release_buffers() * em28xx_release_buffers()
* free frame buffers * free frame buffers
*/ */
void em2820_release_buffers(struct em2820 *dev) void em28xx_release_buffers(struct em28xx *dev)
{ {
if (dev->num_frames) { if (dev->num_frames) {
rvfree(dev->frame[0].bufmem, rvfree(dev->frame[0].bufmem,
...@@ -224,15 +224,15 @@ void em2820_release_buffers(struct em2820 *dev) ...@@ -224,15 +224,15 @@ void em2820_release_buffers(struct em2820 *dev)
} }
/* /*
* em2820_read_reg_req() * em28xx_read_reg_req()
* reads data from the usb device specifying bRequest * reads data from the usb device specifying bRequest
*/ */
int em2820_read_reg_req_len(struct em2820 *dev, u8 req, u16 reg, int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
char *buf, int len) char *buf, int len)
{ {
int ret, byte; int ret, byte;
em2820_regdbg("req=%02x, reg=%02x ", req, reg); em28xx_regdbg("req=%02x, reg=%02x ", req, reg);
ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), req, ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), req,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
...@@ -250,15 +250,15 @@ int em2820_read_reg_req_len(struct em2820 *dev, u8 req, u16 reg, ...@@ -250,15 +250,15 @@ int em2820_read_reg_req_len(struct em2820 *dev, u8 req, u16 reg,
} }
/* /*
* em2820_read_reg_req() * em28xx_read_reg_req()
* reads data from the usb device specifying bRequest * reads data from the usb device specifying bRequest
*/ */
int em2820_read_reg_req(struct em2820 *dev, u8 req, u16 reg) int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
{ {
u8 val; u8 val;
int ret; int ret;
em2820_regdbg("req=%02x, reg=%02x:", req, reg); em28xx_regdbg("req=%02x, reg=%02x:", req, reg);
ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), req, ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), req,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
...@@ -273,16 +273,16 @@ int em2820_read_reg_req(struct em2820 *dev, u8 req, u16 reg) ...@@ -273,16 +273,16 @@ int em2820_read_reg_req(struct em2820 *dev, u8 req, u16 reg)
return val; return val;
} }
int em2820_read_reg(struct em2820 *dev, u16 reg) int em28xx_read_reg(struct em28xx *dev, u16 reg)
{ {
return em2820_read_reg_req(dev, USB_REQ_GET_STATUS, reg); return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
} }
/* /*
* em2820_write_regs_req() * em28xx_write_regs_req()
* sends data to the usb device, specifying bRequest * sends data to the usb device, specifying bRequest
*/ */
int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf, int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
int len) int len)
{ {
int ret; int ret;
...@@ -290,7 +290,7 @@ int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf, ...@@ -290,7 +290,7 @@ int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf,
/*usb_control_msg seems to expect a kmalloced buffer */ /*usb_control_msg seems to expect a kmalloced buffer */
unsigned char *bufs = kmalloc(len, GFP_KERNEL); unsigned char *bufs = kmalloc(len, GFP_KERNEL);
em2820_regdbg("req=%02x reg=%02x:", req, reg); em28xx_regdbg("req=%02x reg=%02x:", req, reg);
if (reg_debug) { if (reg_debug) {
int i; int i;
...@@ -310,124 +310,124 @@ int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf, ...@@ -310,124 +310,124 @@ int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf,
return ret; return ret;
} }
int em2820_write_regs(struct em2820 *dev, u16 reg, char *buf, int len) int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
{ {
return em2820_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len); return em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
} }
/* /*
* em2820_write_reg_bits() * em28xx_write_reg_bits()
* sets only some bits (specified by bitmask) of a register, by first reading * sets only some bits (specified by bitmask) of a register, by first reading
* the actual value * the actual value
*/ */
int em2820_write_reg_bits(struct em2820 *dev, u16 reg, u8 val, int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
u8 bitmask) u8 bitmask)
{ {
int oldval; int oldval;
u8 newval; u8 newval;
if ((oldval = em2820_read_reg(dev, reg)) < 0) if ((oldval = em28xx_read_reg(dev, reg)) < 0)
return oldval; return oldval;
newval = (((u8) oldval) & ~bitmask) | (val & bitmask); newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
return em2820_write_regs(dev, reg, &newval, 1); return em28xx_write_regs(dev, reg, &newval, 1);
} }
/* /*
* em2820_write_ac97() * em28xx_write_ac97()
* write a 16 bit value to the specified AC97 address (LSB first!) * write a 16 bit value to the specified AC97 address (LSB first!)
*/ */
int em2820_write_ac97(struct em2820 *dev, u8 reg, u8 * val) int em28xx_write_ac97(struct em28xx *dev, u8 reg, u8 * val)
{ {
int ret; int ret;
u8 addr = reg & 0x7f; u8 addr = reg & 0x7f;
if ((ret = em2820_write_regs(dev, AC97LSB_REG, val, 2)) < 0) if ((ret = em28xx_write_regs(dev, AC97LSB_REG, val, 2)) < 0)
return ret; return ret;
if ((ret = em2820_write_regs(dev, AC97ADDR_REG, &addr, 1)) < 0) if ((ret = em28xx_write_regs(dev, AC97ADDR_REG, &addr, 1)) < 0)
return ret; return ret;
if ((ret = em2820_read_reg(dev, AC97BUSY_REG)) < 0) if ((ret = em28xx_read_reg(dev, AC97BUSY_REG)) < 0)
return ret; return ret;
else if (((u8) ret) & 0x01) { else if (((u8) ret) & 0x01) {
em2820_warn ("AC97 command still being exectuted: not handled properly!\n"); em28xx_warn ("AC97 command still being exectuted: not handled properly!\n");
} }
return 0; return 0;
} }
int em2820_audio_analog_set(struct em2820 *dev) int em28xx_audio_analog_set(struct em28xx *dev)
{ {
char s[2] = { 0x00, 0x00 }; char s[2] = { 0x00, 0x00 };
s[0] |= 0x1f - dev->volume; s[0] |= 0x1f - dev->volume;
s[1] |= 0x1f - dev->volume; s[1] |= 0x1f - dev->volume;
if (dev->mute) if (dev->mute)
s[1] |= 0x80; s[1] |= 0x80;
return em2820_write_ac97(dev, MASTER_AC97, s); return em28xx_write_ac97(dev, MASTER_AC97, s);
} }
int em2820_colorlevels_set_default(struct em2820 *dev) int em28xx_colorlevels_set_default(struct em28xx *dev)
{ {
em2820_write_regs(dev, YGAIN_REG, "\x10", 1); /* contrast */ em28xx_write_regs(dev, YGAIN_REG, "\x10", 1); /* contrast */
em2820_write_regs(dev, YOFFSET_REG, "\x00", 1); /* brightness */ em28xx_write_regs(dev, YOFFSET_REG, "\x00", 1); /* brightness */
em2820_write_regs(dev, UVGAIN_REG, "\x10", 1); /* saturation */ em28xx_write_regs(dev, UVGAIN_REG, "\x10", 1); /* saturation */
em2820_write_regs(dev, UOFFSET_REG, "\x00", 1); em28xx_write_regs(dev, UOFFSET_REG, "\x00", 1);
em2820_write_regs(dev, VOFFSET_REG, "\x00", 1); em28xx_write_regs(dev, VOFFSET_REG, "\x00", 1);
em2820_write_regs(dev, SHARPNESS_REG, "\x00", 1); em28xx_write_regs(dev, SHARPNESS_REG, "\x00", 1);
em2820_write_regs(dev, GAMMA_REG, "\x20", 1); em28xx_write_regs(dev, GAMMA_REG, "\x20", 1);
em2820_write_regs(dev, RGAIN_REG, "\x20", 1); em28xx_write_regs(dev, RGAIN_REG, "\x20", 1);
em2820_write_regs(dev, GGAIN_REG, "\x20", 1); em28xx_write_regs(dev, GGAIN_REG, "\x20", 1);
em2820_write_regs(dev, BGAIN_REG, "\x20", 1); em28xx_write_regs(dev, BGAIN_REG, "\x20", 1);
em2820_write_regs(dev, ROFFSET_REG, "\x00", 1); em28xx_write_regs(dev, ROFFSET_REG, "\x00", 1);
em2820_write_regs(dev, GOFFSET_REG, "\x00", 1); em28xx_write_regs(dev, GOFFSET_REG, "\x00", 1);
return em2820_write_regs(dev, BOFFSET_REG, "\x00", 1); return em28xx_write_regs(dev, BOFFSET_REG, "\x00", 1);
} }
int em2820_capture_start(struct em2820 *dev, int start) int em28xx_capture_start(struct em28xx *dev, int start)
{ {
int ret; int ret;
/* FIXME: which is the best order? */ /* FIXME: which is the best order? */
/* video registers are sampled by VREF */ /* video registers are sampled by VREF */
if ((ret = em2820_write_reg_bits(dev, USBSUSP_REG, start ? 0x10 : 0x00, if ((ret = em28xx_write_reg_bits(dev, USBSUSP_REG, start ? 0x10 : 0x00,
0x10)) < 0) 0x10)) < 0)
return ret; return ret;
/* enable video capture */ /* enable video capture */
return em2820_write_regs(dev, VINENABLE_REG, start ? "\x67" : "\x27", 1); return em28xx_write_regs(dev, VINENABLE_REG, start ? "\x67" : "\x27", 1);
} }
int em2820_outfmt_set_yuv422(struct em2820 *dev) int em28xx_outfmt_set_yuv422(struct em28xx *dev)
{ {
em2820_write_regs(dev, OUTFMT_REG, "\x34", 1); em28xx_write_regs(dev, OUTFMT_REG, "\x34", 1);
em2820_write_regs(dev, VINMODE_REG, "\x10", 1); em28xx_write_regs(dev, VINMODE_REG, "\x10", 1);
return em2820_write_regs(dev, VINCTRL_REG, "\x11", 1); return em28xx_write_regs(dev, VINCTRL_REG, "\x11", 1);
} }
int em2820_accumulator_set(struct em2820 *dev, u8 xmin, u8 xmax, u8 ymin, int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax, u8 ymin,
u8 ymax) u8 ymax)
{ {
em2820_coredbg("em2820 Scale: (%d,%d)-(%d,%d)\n", xmin, ymin, xmax, ymax); em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n", xmin, ymin, xmax, ymax);
em2820_write_regs(dev, XMIN_REG, &xmin, 1); em28xx_write_regs(dev, XMIN_REG, &xmin, 1);
em2820_write_regs(dev, XMAX_REG, &xmax, 1); em28xx_write_regs(dev, XMAX_REG, &xmax, 1);
em2820_write_regs(dev, YMIN_REG, &ymin, 1); em28xx_write_regs(dev, YMIN_REG, &ymin, 1);
return em2820_write_regs(dev, YMAX_REG, &ymax, 1); return em28xx_write_regs(dev, YMAX_REG, &ymax, 1);
} }
int em2820_capture_area_set(struct em2820 *dev, u8 hstart, u8 vstart, int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
u16 width, u16 height) u16 width, u16 height)
{ {
u8 cwidth = width; u8 cwidth = width;
u8 cheight = height; u8 cheight = height;
u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01); u8 overflow = (height >> 7 & 0x02) | (width >> 8 & 0x01);
em2820_coredbg("em2820 Area Set: (%d,%d)\n", (width | (overflow & 2) << 7), em28xx_coredbg("em28xx Area Set: (%d,%d)\n", (width | (overflow & 2) << 7),
(height | (overflow & 1) << 8)); (height | (overflow & 1) << 8));
em2820_write_regs(dev, HSTART_REG, &hstart, 1); em28xx_write_regs(dev, HSTART_REG, &hstart, 1);
em2820_write_regs(dev, VSTART_REG, &vstart, 1); em28xx_write_regs(dev, VSTART_REG, &vstart, 1);
em2820_write_regs(dev, CWIDTH_REG, &cwidth, 1); em28xx_write_regs(dev, CWIDTH_REG, &cwidth, 1);
em2820_write_regs(dev, CHEIGHT_REG, &cheight, 1); em28xx_write_regs(dev, CHEIGHT_REG, &cheight, 1);
return em2820_write_regs(dev, OFLOW_REG, &overflow, 1); return em28xx_write_regs(dev, OFLOW_REG, &overflow, 1);
} }
int em2820_scaler_set(struct em2820 *dev, u16 h, u16 v) int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
{ {
u8 mode; u8 mode;
/* the em2800 scaler only supports scaling down to 50% */ /* the em2800 scaler only supports scaling down to 50% */
...@@ -437,34 +437,34 @@ int em2820_scaler_set(struct em2820 *dev, u16 h, u16 v) ...@@ -437,34 +437,34 @@ int em2820_scaler_set(struct em2820 *dev, u16 h, u16 v)
u8 buf[2]; u8 buf[2];
buf[0] = h; buf[0] = h;
buf[1] = h >> 8; buf[1] = h >> 8;
em2820_write_regs(dev, HSCALELOW_REG, (char *)buf, 2); em28xx_write_regs(dev, HSCALELOW_REG, (char *)buf, 2);
buf[0] = v; buf[0] = v;
buf[1] = v >> 8; buf[1] = v >> 8;
em2820_write_regs(dev, VSCALELOW_REG, (char *)buf, 2); em28xx_write_regs(dev, VSCALELOW_REG, (char *)buf, 2);
/* it seems that both H and V scalers must be active to work correctly */ /* it seems that both H and V scalers must be active to work correctly */
mode = (h || v)? 0x30: 0x00; mode = (h || v)? 0x30: 0x00;
} }
return em2820_write_reg_bits(dev, COMPR_REG, mode, 0x30); return em28xx_write_reg_bits(dev, COMPR_REG, mode, 0x30);
} }
/* FIXME: this only function read values from dev */ /* FIXME: this only function read values from dev */
int em2820_resolution_set(struct em2820 *dev) int em28xx_resolution_set(struct em28xx *dev)
{ {
int width, height; int width, height;
width = norm_maxw(dev); width = norm_maxw(dev);
height = norm_maxh(dev) >> 1; height = norm_maxh(dev) >> 1;
em2820_outfmt_set_yuv422(dev); em28xx_outfmt_set_yuv422(dev);
em2820_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2); em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
em2820_capture_area_set(dev, 0, 0, width >> 2, height >> 2); em28xx_capture_area_set(dev, 0, 0, width >> 2, height >> 2);
return em2820_scaler_set(dev, dev->hscale, dev->vscale); return em28xx_scaler_set(dev, dev->hscale, dev->vscale);
} }
/******************* isoc transfer handling ****************************/ /******************* isoc transfer handling ****************************/
#ifdef ENABLE_DEBUG_ISOC_FRAMES #ifdef ENABLE_DEBUG_ISOC_FRAMES
static void em2820_isoc_dump(struct urb *urb, struct pt_regs *regs) static void em28xx_isoc_dump(struct urb *urb, struct pt_regs *regs)
{ {
int len = 0; int len = 0;
int ntrans = 0; int ntrans = 0;
...@@ -503,7 +503,7 @@ static void em2820_isoc_dump(struct urb *urb, struct pt_regs *regs) ...@@ -503,7 +503,7 @@ static void em2820_isoc_dump(struct urb *urb, struct pt_regs *regs)
} }
#endif #endif
static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f, static inline int em28xx_isoc_video(struct em28xx *dev,struct em28xx_frame_t **f,
unsigned long *lock_flags, unsigned char buf) unsigned long *lock_flags, unsigned char buf)
{ {
if (!(buf & 0x01)) { if (!(buf & 0x01)) {
...@@ -511,7 +511,7 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f ...@@ -511,7 +511,7 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f
/*previous frame is incomplete */ /*previous frame is incomplete */
if ((*f)->fieldbytesused < dev->field_size) { if ((*f)->fieldbytesused < dev->field_size) {
(*f)->state = F_ERROR; (*f)->state = F_ERROR;
em2820_isocdbg ("dropping incomplete bottom field (%i missing bytes)", em28xx_isocdbg ("dropping incomplete bottom field (%i missing bytes)",
dev->field_size-(*f)->fieldbytesused); dev->field_size-(*f)->fieldbytesused);
} else { } else {
(*f)->state = F_DONE; (*f)->state = F_DONE;
...@@ -524,13 +524,13 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f ...@@ -524,13 +524,13 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f
list_move_tail(&(*f)->frame, &dev->outqueue); list_move_tail(&(*f)->frame, &dev->outqueue);
if (!list_empty(&dev->inqueue)) if (!list_empty(&dev->inqueue))
(*f) = list_entry(dev-> inqueue.next, (*f) = list_entry(dev-> inqueue.next,
struct em2820_frame_t,frame); struct em28xx_frame_t,frame);
else else
(*f) = NULL; (*f) = NULL;
spin_unlock_irqrestore(&dev->queue_lock,*lock_flags); spin_unlock_irqrestore(&dev->queue_lock,*lock_flags);
} }
if (!(*f)) { if (!(*f)) {
em2820_isocdbg ("new frame but no buffer is free"); em28xx_isocdbg ("new frame but no buffer is free");
return -1; return -1;
} }
do_gettimeofday(&(*f)->buf.timestamp); do_gettimeofday(&(*f)->buf.timestamp);
...@@ -545,10 +545,10 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f ...@@ -545,10 +545,10 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f
if ((*f)->state == F_GRABBING) { if ((*f)->state == F_GRABBING) {
if (!(*f)->top_field) { if (!(*f)->top_field) {
(*f)->state = F_ERROR; (*f)->state = F_ERROR;
em2820_isocdbg ("unexpected begin of bottom field; discarding it"); em28xx_isocdbg ("unexpected begin of bottom field; discarding it");
} else if ((*f)-> fieldbytesused < dev->field_size - 172) { } else if ((*f)-> fieldbytesused < dev->field_size - 172) {
(*f)->state = F_ERROR; (*f)->state = F_ERROR;
em2820_isocdbg ("dropping incomplete top field (%i missing bytes)", em28xx_isocdbg ("dropping incomplete top field (%i missing bytes)",
dev->field_size-(*f)->fieldbytesused); dev->field_size-(*f)->fieldbytesused);
} else { } else {
(*f)->top_field = 0; (*f)->top_field = 0;
...@@ -559,14 +559,14 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f ...@@ -559,14 +559,14 @@ static inline int em2820_isoc_video(struct em2820 *dev,struct em2820_frame_t **f
return (0); return (0);
} }
static inline void em2820_isoc_video_copy(struct em2820 *dev, static inline void em28xx_isoc_video_copy(struct em28xx *dev,
struct em2820_frame_t **f, unsigned char *buf, int len) struct em28xx_frame_t **f, unsigned char *buf, int len)
{ {
void *fieldstart, *startwrite, *startread; void *fieldstart, *startwrite, *startread;
int linesdone, currlinedone, offset, lencopy,remain; int linesdone, currlinedone, offset, lencopy,remain;
if(dev->frame_size != (*f)->buf.length){ if(dev->frame_size != (*f)->buf.length){
em2820_err("frame_size %i and buf.length %i are different!!!\n",dev->frame_size,(*f)->buf.length); em28xx_err("frame_size %i and buf.length %i are different!!!\n",dev->frame_size,(*f)->buf.length);
return; return;
} }
...@@ -574,7 +574,7 @@ static inline void em2820_isoc_video_copy(struct em2820 *dev, ...@@ -574,7 +574,7 @@ static inline void em2820_isoc_video_copy(struct em2820 *dev,
len =dev->field_size - (*f)->fieldbytesused; len =dev->field_size - (*f)->fieldbytesused;
if (buf[0] != 0x88 && buf[0] != 0x22) { if (buf[0] != 0x88 && buf[0] != 0x22) {
em2820_isocdbg("frame is not complete\n"); em28xx_isocdbg("frame is not complete\n");
startread = buf; startread = buf;
len+=4; len+=4;
} else } else
...@@ -613,21 +613,21 @@ static inline void em2820_isoc_video_copy(struct em2820 *dev, ...@@ -613,21 +613,21 @@ static inline void em2820_isoc_video_copy(struct em2820 *dev,
} }
/* /*
* em2820_isoIrq() * em28xx_isoIrq()
* handles the incoming isoc urbs and fills the frames from our inqueue * handles the incoming isoc urbs and fills the frames from our inqueue
*/ */
void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) void em28xx_isocIrq(struct urb *urb, struct pt_regs *regs)
{ {
struct em2820 *dev = urb->context; struct em28xx *dev = urb->context;
int i, status; int i, status;
struct em2820_frame_t **f; struct em28xx_frame_t **f;
unsigned long lock_flags; unsigned long lock_flags;
if (!dev) if (!dev)
return; return;
#ifdef ENABLE_DEBUG_ISOC_FRAMES #ifdef ENABLE_DEBUG_ISOC_FRAMES
if (isoc_debug>1) if (isoc_debug>1)
em2820_isoc_dump(urb, regs); em28xx_isoc_dump(urb, regs);
#endif #endif
if (urb->status == -ENOENT) if (urb->status == -ENOENT)
...@@ -639,7 +639,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) ...@@ -639,7 +639,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs)
dev->stream = STREAM_OFF; dev->stream = STREAM_OFF;
if ((*f)) if ((*f))
(*f)->state = F_QUEUED; (*f)->state = F_QUEUED;
em2820_isocdbg("stream interrupted"); em28xx_isocdbg("stream interrupted");
wake_up_interruptible(&dev->wait_stream); wake_up_interruptible(&dev->wait_stream);
} }
...@@ -649,7 +649,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) ...@@ -649,7 +649,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs)
if (dev->stream == STREAM_ON && !list_empty(&dev->inqueue)) { if (dev->stream == STREAM_ON && !list_empty(&dev->inqueue)) {
if (!(*f)) if (!(*f))
(*f) = list_entry(dev->inqueue.next, (*f) = list_entry(dev->inqueue.next,
struct em2820_frame_t, frame); struct em28xx_frame_t, frame);
for (i = 0; i < urb->number_of_packets; i++) { for (i = 0; i < urb->number_of_packets; i++) {
unsigned char *buf = urb->transfer_buffer + unsigned char *buf = urb->transfer_buffer +
...@@ -657,34 +657,34 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) ...@@ -657,34 +657,34 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs)
int len = urb->iso_frame_desc[i].actual_length - 4; int len = urb->iso_frame_desc[i].actual_length - 4;
if (urb->iso_frame_desc[i].status) { if (urb->iso_frame_desc[i].status) {
em2820_isocdbg("data error: [%d] len=%d, status=%d", i, em28xx_isocdbg("data error: [%d] len=%d, status=%d", i,
urb->iso_frame_desc[i].actual_length, urb->iso_frame_desc[i].actual_length,
urb->iso_frame_desc[i].status); urb->iso_frame_desc[i].status);
if (urb->iso_frame_desc[i].status != -EPROTO) if (urb->iso_frame_desc[i].status != -EPROTO)
continue; continue;
} }
if (urb->iso_frame_desc[i].actual_length <= 0) { if (urb->iso_frame_desc[i].actual_length <= 0) {
em2820_isocdbg("packet %d is empty",i); em28xx_isocdbg("packet %d is empty",i);
continue; continue;
} }
if (urb->iso_frame_desc[i].actual_length > if (urb->iso_frame_desc[i].actual_length >
dev->max_pkt_size) { dev->max_pkt_size) {
em2820_isocdbg("packet bigger than packet size"); em28xx_isocdbg("packet bigger than packet size");
continue; continue;
} }
/*new frame */ /*new frame */
if (buf[0] == 0x22 && buf[1] == 0x5a) { if (buf[0] == 0x22 && buf[1] == 0x5a) {
em2820_isocdbg("Video frame, length=%i!",len); em28xx_isocdbg("Video frame, length=%i!",len);
if (em2820_isoc_video(dev,f,&lock_flags,buf[2])) if (em28xx_isoc_video(dev,f,&lock_flags,buf[2]))
break; break;
} else if (buf[0]==0x33 && buf[1]==0x95 && buf[2]==0x00) { } else if (buf[0]==0x33 && buf[1]==0x95 && buf[2]==0x00) {
em2820_isocdbg("VBI HEADER!!!"); em28xx_isocdbg("VBI HEADER!!!");
} }
/* actual copying */ /* actual copying */
if ((*f)->state == F_GRABBING) { if ((*f)->state == F_GRABBING) {
em2820_isoc_video_copy(dev,f,buf, len); em28xx_isoc_video_copy(dev,f,buf, len);
} }
} }
} }
...@@ -696,7 +696,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) ...@@ -696,7 +696,7 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs)
urb->status = 0; urb->status = 0;
if ((status = usb_submit_urb(urb, GFP_ATOMIC))) { if ((status = usb_submit_urb(urb, GFP_ATOMIC))) {
em2820_errdev("resubmit of urb failed (error=%i)\n", status); em28xx_errdev("resubmit of urb failed (error=%i)\n", status);
dev->state |= DEV_MISCONFIGURED; dev->state |= DEV_MISCONFIGURED;
} }
wake_up_interruptible(&dev->wait_frame); wake_up_interruptible(&dev->wait_frame);
...@@ -704,58 +704,58 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs) ...@@ -704,58 +704,58 @@ void em2820_isocIrq(struct urb *urb, struct pt_regs *regs)
} }
/* /*
* em2820_uninit_isoc() * em28xx_uninit_isoc()
* deallocates the buffers and urbs allocated during em2820_init_iosc() * deallocates the buffers and urbs allocated during em28xx_init_iosc()
*/ */
void em2820_uninit_isoc(struct em2820 *dev) void em28xx_uninit_isoc(struct em28xx *dev)
{ {
int i; int i;
for (i = 0; i < EM2820_NUM_BUFS; i++) { for (i = 0; i < EM28XX_NUM_BUFS; i++) {
if (dev->urb[i]) { if (dev->urb[i]) {
usb_kill_urb(dev->urb[i]); usb_kill_urb(dev->urb[i]);
if (dev->transfer_buffer[i]){ if (dev->transfer_buffer[i]){
usb_buffer_free(dev->udev,(EM2820_NUM_PACKETS*dev->max_pkt_size),dev->transfer_buffer[i],dev->urb[i]->transfer_dma); usb_buffer_free(dev->udev,(EM28XX_NUM_PACKETS*dev->max_pkt_size),dev->transfer_buffer[i],dev->urb[i]->transfer_dma);
} }
usb_free_urb(dev->urb[i]); usb_free_urb(dev->urb[i]);
} }
dev->urb[i] = NULL; dev->urb[i] = NULL;
dev->transfer_buffer[i] = NULL; dev->transfer_buffer[i] = NULL;
} }
em2820_capture_start(dev, 0); em28xx_capture_start(dev, 0);
} }
/* /*
* em2820_init_isoc() * em28xx_init_isoc()
* allocates transfer buffers and submits the urbs for isoc transfer * allocates transfer buffers and submits the urbs for isoc transfer
*/ */
int em2820_init_isoc(struct em2820 *dev) int em28xx_init_isoc(struct em28xx *dev)
{ {
/* change interface to 3 which allowes the biggest packet sizes */ /* change interface to 3 which allowes the biggest packet sizes */
int i, errCode; int i, errCode;
const int sb_size = EM2820_NUM_PACKETS * dev->max_pkt_size; const int sb_size = EM28XX_NUM_PACKETS * dev->max_pkt_size;
/* reset streaming vars */ /* reset streaming vars */
dev->frame_current = NULL; dev->frame_current = NULL;
dev->frame_count = 0; dev->frame_count = 0;
/* allocate urbs */ /* allocate urbs */
for (i = 0; i < EM2820_NUM_BUFS; i++) { for (i = 0; i < EM28XX_NUM_BUFS; i++) {
struct urb *urb; struct urb *urb;
int j, k; int j, k;
/* allocate transfer buffer */ /* allocate transfer buffer */
urb = usb_alloc_urb(EM2820_NUM_PACKETS, GFP_KERNEL); urb = usb_alloc_urb(EM28XX_NUM_PACKETS, GFP_KERNEL);
if (!urb){ if (!urb){
em2820_errdev("cannot alloc urb %i\n", i); em28xx_errdev("cannot alloc urb %i\n", i);
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
return -ENOMEM; return -ENOMEM;
} }
dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,&urb->transfer_dma); dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,&urb->transfer_dma);
if (!dev->transfer_buffer[i]) { if (!dev->transfer_buffer[i]) {
em2820_errdev em28xx_errdev
("unable to allocate %i bytes for transfer buffer %i\n", ("unable to allocate %i bytes for transfer buffer %i\n",
sb_size, i); sb_size, i);
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
return -ENOMEM; return -ENOMEM;
} }
memset(dev->transfer_buffer[i], 0, sb_size); memset(dev->transfer_buffer[i], 0, sb_size);
...@@ -765,10 +765,10 @@ int em2820_init_isoc(struct em2820 *dev) ...@@ -765,10 +765,10 @@ int em2820_init_isoc(struct em2820 *dev)
urb->transfer_flags = URB_ISO_ASAP; urb->transfer_flags = URB_ISO_ASAP;
urb->interval = 1; urb->interval = 1;
urb->transfer_buffer = dev->transfer_buffer[i]; urb->transfer_buffer = dev->transfer_buffer[i];
urb->complete = em2820_isocIrq; urb->complete = em28xx_isocIrq;
urb->number_of_packets = EM2820_NUM_PACKETS; urb->number_of_packets = EM28XX_NUM_PACKETS;
urb->transfer_buffer_length = sb_size; urb->transfer_buffer_length = sb_size;
for (j = k = 0; j < EM2820_NUM_PACKETS; for (j = k = 0; j < EM28XX_NUM_PACKETS;
j++, k += dev->max_pkt_size) { j++, k += dev->max_pkt_size) {
urb->iso_frame_desc[j].offset = k; urb->iso_frame_desc[j].offset = k;
urb->iso_frame_desc[j].length = urb->iso_frame_desc[j].length =
...@@ -778,12 +778,12 @@ int em2820_init_isoc(struct em2820 *dev) ...@@ -778,12 +778,12 @@ int em2820_init_isoc(struct em2820 *dev)
} }
/* submit urbs */ /* submit urbs */
for (i = 0; i < EM2820_NUM_BUFS; i++) { for (i = 0; i < EM28XX_NUM_BUFS; i++) {
errCode = usb_submit_urb(dev->urb[i], GFP_KERNEL); errCode = usb_submit_urb(dev->urb[i], GFP_KERNEL);
if (errCode) { if (errCode) {
em2820_errdev("submit of urb %i failed (error=%i)\n", i, em28xx_errdev("submit of urb %i failed (error=%i)\n", i,
errCode); errCode);
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
return errCode; return errCode;
} }
} }
...@@ -791,21 +791,21 @@ int em2820_init_isoc(struct em2820 *dev) ...@@ -791,21 +791,21 @@ int em2820_init_isoc(struct em2820 *dev)
return 0; return 0;
} }
int em2820_set_alternate(struct em2820 *dev) int em28xx_set_alternate(struct em28xx *dev)
{ {
int errCode, prev_alt = dev->alt; int errCode, prev_alt = dev->alt;
dev->alt = alt; dev->alt = alt;
if (dev->alt == 0) { if (dev->alt == 0) {
int i; int i;
if(dev->is_em2800){ /* always use the max packet size for em2800 based devices */ if(dev->is_em2800){ /* always use the max packet size for em2800 based devices */
for(i=0;i< EM2820_MAX_ALT; i++) for(i=0;i< EM28XX_MAX_ALT; i++)
if(dev->alt_max_pkt_size[i]>dev->alt_max_pkt_size[dev->alt]) if(dev->alt_max_pkt_size[i]>dev->alt_max_pkt_size[dev->alt])
dev->alt=i; dev->alt=i;
}else{ }else{
unsigned int min_pkt_size = dev->field_size / 137; /* FIXME: empiric magic number */ unsigned int min_pkt_size = dev->field_size / 137; /* FIXME: empiric magic number */
em2820_coredbg("minimum isoc packet size: %u", min_pkt_size); em28xx_coredbg("minimum isoc packet size: %u", min_pkt_size);
dev->alt = 7; dev->alt = 7;
for (i = 1; i < EM2820_MAX_ALT; i += 2) /* FIXME: skip even alternate: why do they not work? */ for (i = 1; i < EM28XX_MAX_ALT; i += 2) /* FIXME: skip even alternate: why do they not work? */
if (dev->alt_max_pkt_size[i] >= min_pkt_size) { if (dev->alt_max_pkt_size[i] >= min_pkt_size) {
dev->alt = i; dev->alt = i;
break; break;
...@@ -815,11 +815,11 @@ int em2820_set_alternate(struct em2820 *dev) ...@@ -815,11 +815,11 @@ int em2820_set_alternate(struct em2820 *dev)
if (dev->alt != prev_alt) { if (dev->alt != prev_alt) {
dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt]; dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt];
em2820_coredbg("setting alternate %d with wMaxPacketSize=%u", dev->alt, em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u", dev->alt,
dev->max_pkt_size); dev->max_pkt_size);
errCode = usb_set_interface(dev->udev, 0, dev->alt); errCode = usb_set_interface(dev->udev, 0, dev->alt);
if (errCode < 0) { if (errCode < 0) {
em2820_errdev em28xx_errdev
("cannot change alternate number to %d (error=%i)\n", ("cannot change alternate number to %d (error=%i)\n",
dev->alt, errCode); dev->alt, errCode);
return errCode; return errCode;
......
...@@ -50,7 +50,7 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]"); ...@@ -50,7 +50,7 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
* em2800_i2c_send_max4() * em2800_i2c_send_max4()
* send up to 4 bytes to the i2c device * send up to 4 bytes to the i2c device
*/ */
static int em2800_i2c_send_max4(struct em2820 *dev, unsigned char addr, static int em2800_i2c_send_max4(struct em28xx *dev, unsigned char addr,
char *buf, int len) char *buf, int len)
{ {
int ret; int ret;
...@@ -67,19 +67,19 @@ static int em2800_i2c_send_max4(struct em2820 *dev, unsigned char addr, ...@@ -67,19 +67,19 @@ static int em2800_i2c_send_max4(struct em2820 *dev, unsigned char addr,
if (len > 3) if (len > 3)
b2[0] = buf[3]; b2[0] = buf[3];
ret = dev->em2820_write_regs(dev, 4 - len, &b2[4 - len], 2 + len); ret = dev->em28xx_write_regs(dev, 4 - len, &b2[4 - len], 2 + len);
if (ret != 2 + len) { if (ret != 2 + len) {
em2820_warn("writting to i2c device failed (error=%i)\n", ret); em28xx_warn("writting to i2c device failed (error=%i)\n", ret);
return -EIO; return -EIO;
} }
for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0; for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0;
write_timeout -= 5) { write_timeout -= 5) {
ret = dev->em2820_read_reg(dev, 0x05); ret = dev->em28xx_read_reg(dev, 0x05);
if (ret == 0x80 + len - 1) if (ret == 0x80 + len - 1)
return len; return len;
mdelay(5); mdelay(5);
} }
em2820_warn("i2c write timed out\n"); em28xx_warn("i2c write timed out\n");
return -EIO; return -EIO;
} }
...@@ -94,7 +94,7 @@ static int em2800_i2c_send_bytes(void *data, unsigned char addr, char *buf, ...@@ -94,7 +94,7 @@ static int em2800_i2c_send_bytes(void *data, unsigned char addr, char *buf,
int wrcount = 0; int wrcount = 0;
int count; int count;
int maxLen = 4; int maxLen = 4;
struct em2820 *dev = (struct em2820 *)data; struct em28xx *dev = (struct em28xx *)data;
while (len > 0) { while (len > 0) {
count = (len > maxLen) ? maxLen : len; count = (len > maxLen) ? maxLen : len;
ret = em2800_i2c_send_max4(dev, addr, bufPtr, count); ret = em2800_i2c_send_max4(dev, addr, bufPtr, count);
...@@ -112,27 +112,27 @@ static int em2800_i2c_send_bytes(void *data, unsigned char addr, char *buf, ...@@ -112,27 +112,27 @@ static int em2800_i2c_send_bytes(void *data, unsigned char addr, char *buf,
* em2800_i2c_check_for_device() * em2800_i2c_check_for_device()
* check if there is a i2c_device at the supplied address * check if there is a i2c_device at the supplied address
*/ */
static int em2800_i2c_check_for_device(struct em2820 *dev, unsigned char addr) static int em2800_i2c_check_for_device(struct em28xx *dev, unsigned char addr)
{ {
char msg; char msg;
int ret; int ret;
int write_timeout; int write_timeout;
msg = addr; msg = addr;
ret = dev->em2820_write_regs(dev, 0x04, &msg, 1); ret = dev->em28xx_write_regs(dev, 0x04, &msg, 1);
if (ret < 0) { if (ret < 0) {
em2820_warn("setting i2c device address failed (error=%i)\n", em28xx_warn("setting i2c device address failed (error=%i)\n",
ret); ret);
return ret; return ret;
} }
msg = 0x84; msg = 0x84;
ret = dev->em2820_write_regs(dev, 0x05, &msg, 1); ret = dev->em28xx_write_regs(dev, 0x05, &msg, 1);
if (ret < 0) { if (ret < 0) {
em2820_warn("preparing i2c read failed (error=%i)\n", ret); em28xx_warn("preparing i2c read failed (error=%i)\n", ret);
return ret; return ret;
} }
for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0; for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0;
write_timeout -= 5) { write_timeout -= 5) {
unsigned msg = dev->em2820_read_reg(dev, 0x5); unsigned msg = dev->em28xx_read_reg(dev, 0x5);
if (msg == 0x94) if (msg == 0x94)
return -ENODEV; return -ENODEV;
else if (msg == 0x84) else if (msg == 0x84)
...@@ -146,21 +146,21 @@ static int em2800_i2c_check_for_device(struct em2820 *dev, unsigned char addr) ...@@ -146,21 +146,21 @@ static int em2800_i2c_check_for_device(struct em2820 *dev, unsigned char addr)
* em2800_i2c_recv_bytes() * em2800_i2c_recv_bytes()
* read from the i2c device * read from the i2c device
*/ */
static int em2800_i2c_recv_bytes(struct em2820 *dev, unsigned char addr, static int em2800_i2c_recv_bytes(struct em28xx *dev, unsigned char addr,
char *buf, int len) char *buf, int len)
{ {
int ret; int ret;
/* check for the device and set i2c read address */ /* check for the device and set i2c read address */
ret = em2800_i2c_check_for_device(dev, addr); ret = em2800_i2c_check_for_device(dev, addr);
if (ret) { if (ret) {
em2820_warn em28xx_warn
("preparing read at i2c address 0x%x failed (error=%i)\n", ("preparing read at i2c address 0x%x failed (error=%i)\n",
addr, ret); addr, ret);
return ret; return ret;
} }
ret = dev->em2820_read_reg_req_len(dev, 0x0, 0x3, buf, len); ret = dev->em28xx_read_reg_req_len(dev, 0x0, 0x3, buf, len);
if (ret < 0) { if (ret < 0) {
em2820_warn("reading from i2c device at 0x%x failed (error=%i)", em28xx_warn("reading from i2c device at 0x%x failed (error=%i)",
addr, ret); addr, ret);
return ret; return ret;
} }
...@@ -168,66 +168,66 @@ static int em2800_i2c_recv_bytes(struct em2820 *dev, unsigned char addr, ...@@ -168,66 +168,66 @@ static int em2800_i2c_recv_bytes(struct em2820 *dev, unsigned char addr,
} }
/* /*
* em2820_i2c_send_bytes() * em28xx_i2c_send_bytes()
* untested for more than 4 bytes * untested for more than 4 bytes
*/ */
static int em2820_i2c_send_bytes(void *data, unsigned char addr, char *buf, static int em28xx_i2c_send_bytes(void *data, unsigned char addr, char *buf,
short len, int stop) short len, int stop)
{ {
int wrcount = 0; int wrcount = 0;
struct em2820 *dev = (struct em2820 *)data; struct em28xx *dev = (struct em28xx *)data;
wrcount = dev->em2820_write_regs_req(dev, stop ? 2 : 3, addr, buf, len); wrcount = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
return wrcount; return wrcount;
} }
/* /*
* em2820_i2c_recv_bytes() * em28xx_i2c_recv_bytes()
* read a byte from the i2c device * read a byte from the i2c device
*/ */
static int em2820_i2c_recv_bytes(struct em2820 *dev, unsigned char addr, static int em28xx_i2c_recv_bytes(struct em28xx *dev, unsigned char addr,
char *buf, int len) char *buf, int len)
{ {
int ret; int ret;
ret = dev->em2820_read_reg_req_len(dev, 2, addr, buf, len); ret = dev->em28xx_read_reg_req_len(dev, 2, addr, buf, len);
if (ret < 0) { if (ret < 0) {
em2820_warn("reading i2c device failed (error=%i)\n", ret); em28xx_warn("reading i2c device failed (error=%i)\n", ret);
return ret; return ret;
} }
if (dev->em2820_read_reg(dev, 0x5) != 0) if (dev->em28xx_read_reg(dev, 0x5) != 0)
return -ENODEV; return -ENODEV;
return ret; return ret;
} }
/* /*
* em2820_i2c_check_for_device() * em28xx_i2c_check_for_device()
* check if there is a i2c_device at the supplied address * check if there is a i2c_device at the supplied address
*/ */
static int em2820_i2c_check_for_device(struct em2820 *dev, unsigned char addr) static int em28xx_i2c_check_for_device(struct em28xx *dev, unsigned char addr)
{ {
char msg; char msg;
int ret; int ret;
msg = addr; msg = addr;
ret = dev->em2820_read_reg_req(dev, 2, addr); ret = dev->em28xx_read_reg_req(dev, 2, addr);
if (ret < 0) { if (ret < 0) {
em2820_warn("reading from i2c device failed (error=%i)\n", ret); em28xx_warn("reading from i2c device failed (error=%i)\n", ret);
return ret; return ret;
} }
if (dev->em2820_read_reg(dev, 0x5) != 0) if (dev->em28xx_read_reg(dev, 0x5) != 0)
return -ENODEV; return -ENODEV;
return 0; return 0;
} }
/* /*
* em2820_i2c_xfer() * em28xx_i2c_xfer()
* the main i2c transfer function * the main i2c transfer function
*/ */
static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap, static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
struct i2c_msg msgs[], int num) struct i2c_msg msgs[], int num)
{ {
struct em2820 *dev = i2c_adap->algo_data; struct em28xx *dev = i2c_adap->algo_data;
int addr, rc, i, byte; int addr, rc, i, byte;
if (num <= 0) if (num <= 0)
...@@ -241,7 +241,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -241,7 +241,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap,
if (dev->is_em2800) if (dev->is_em2800)
rc = em2800_i2c_check_for_device(dev, addr); rc = em2800_i2c_check_for_device(dev, addr);
else else
rc = em2820_i2c_check_for_device(dev, addr); rc = em28xx_i2c_check_for_device(dev, addr);
if (rc < 0) { if (rc < 0) {
dprintk2(2," no device\n"); dprintk2(2," no device\n");
return rc; return rc;
...@@ -254,7 +254,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -254,7 +254,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap,
msgs[i].buf, msgs[i].buf,
msgs[i].len); msgs[i].len);
else else
rc = em2820_i2c_recv_bytes(dev, addr, rc = em28xx_i2c_recv_bytes(dev, addr,
msgs[i].buf, msgs[i].buf,
msgs[i].len); msgs[i].len);
if (i2c_debug>=2) { if (i2c_debug>=2) {
...@@ -273,7 +273,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -273,7 +273,7 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap,
msgs[i].buf, msgs[i].buf,
msgs[i].len); msgs[i].len);
else else
rc = em2820_i2c_send_bytes(dev, addr, rc = em28xx_i2c_send_bytes(dev, addr,
msgs[i].buf, msgs[i].buf,
msgs[i].len, msgs[i].len,
i == num - 1); i == num - 1);
...@@ -290,10 +290,10 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -290,10 +290,10 @@ static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap,
return rc; return rc;
} }
static int em2820_i2c_eeprom(struct em2820 *dev, unsigned char *eedata, int len) static int em28xx_i2c_eeprom(struct em28xx *dev, unsigned char *eedata, int len)
{ {
unsigned char buf, *p = eedata; unsigned char buf, *p = eedata;
struct em2820_eeprom *em_eeprom = (void *)eedata; struct em28xx_eeprom *em_eeprom = (void *)eedata;
int i, err, size = len, block; int i, err, size = len, block;
dev->i2c_client.addr = 0xa0 >> 1; dev->i2c_client.addr = 0xa0 >> 1;
...@@ -410,9 +410,9 @@ static void dec_use(struct i2c_adapter *adap) ...@@ -410,9 +410,9 @@ static void dec_use(struct i2c_adapter *adap)
} }
#endif #endif
static int em2820_set_tuner(int check_eeprom, struct i2c_client *client) static int em28xx_set_tuner(int check_eeprom, struct i2c_client *client)
{ {
struct em2820 *dev = client->adapter->algo_data; struct em28xx *dev = client->adapter->algo_data;
struct tuner_setup tun_setup; struct tuner_setup tun_setup;
if (dev->has_tuner) { if (dev->has_tuner) {
...@@ -420,7 +420,7 @@ static int em2820_set_tuner(int check_eeprom, struct i2c_client *client) ...@@ -420,7 +420,7 @@ static int em2820_set_tuner(int check_eeprom, struct i2c_client *client)
tun_setup.type = dev->tuner_type; tun_setup.type = dev->tuner_type;
tun_setup.addr = dev->tuner_addr; tun_setup.addr = dev->tuner_addr;
em2820_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR, &tun_setup); em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR, &tun_setup);
} }
return (0); return (0);
...@@ -433,11 +433,11 @@ static int em2820_set_tuner(int check_eeprom, struct i2c_client *client) ...@@ -433,11 +433,11 @@ static int em2820_set_tuner(int check_eeprom, struct i2c_client *client)
*/ */
static int attach_inform(struct i2c_client *client) static int attach_inform(struct i2c_client *client)
{ {
struct em2820 *dev = client->adapter->algo_data; struct em28xx *dev = client->adapter->algo_data;
switch (client->addr << 1) { switch (client->addr << 1) {
case 0x86: case 0x86:
em2820_i2c_call_clients(dev, TDA9887_SET_CONFIG, &dev->tda9887_conf); em28xx_i2c_call_clients(dev, TDA9887_SET_CONFIG, &dev->tda9887_conf);
break; break;
case 0x42: case 0x42:
dprintk1(1,"attach_inform: saa7114 detected.\n"); dprintk1(1,"attach_inform: saa7114 detected.\n");
...@@ -453,7 +453,7 @@ static int attach_inform(struct i2c_client *client) ...@@ -453,7 +453,7 @@ static int attach_inform(struct i2c_client *client)
{ {
struct IR_i2c *ir = i2c_get_clientdata(client); struct IR_i2c *ir = i2c_get_clientdata(client);
dprintk1(1,"attach_inform: IR detected (%s).\n",ir->phys); dprintk1(1,"attach_inform: IR detected (%s).\n",ir->phys);
em2820_set_ir(dev,ir); em28xx_set_ir(dev,ir);
break; break;
} }
case 0x80: case 0x80:
...@@ -467,19 +467,19 @@ static int attach_inform(struct i2c_client *client) ...@@ -467,19 +467,19 @@ static int attach_inform(struct i2c_client *client)
default: default:
dprintk1(1,"attach inform: detected I2C address %x\n", client->addr << 1); dprintk1(1,"attach inform: detected I2C address %x\n", client->addr << 1);
dev->tuner_addr = client->addr; dev->tuner_addr = client->addr;
em2820_set_tuner(-1, client); em28xx_set_tuner(-1, client);
} }
return 0; return 0;
} }
static struct i2c_algorithm em2820_algo = { static struct i2c_algorithm em28xx_algo = {
.master_xfer = em2820_i2c_xfer, .master_xfer = em28xx_i2c_xfer,
.algo_control = algo_control, .algo_control = algo_control,
.functionality = functionality, .functionality = functionality,
}; };
static struct i2c_adapter em2820_adap_template = { static struct i2c_adapter em28xx_adap_template = {
#ifdef I2C_PEC #ifdef I2C_PEC
.owner = THIS_MODULE, .owner = THIS_MODULE,
#else #else
...@@ -489,14 +489,14 @@ static struct i2c_adapter em2820_adap_template = { ...@@ -489,14 +489,14 @@ static struct i2c_adapter em2820_adap_template = {
#ifdef I2C_CLASS_TV_ANALOG #ifdef I2C_CLASS_TV_ANALOG
.class = I2C_CLASS_TV_ANALOG, .class = I2C_CLASS_TV_ANALOG,
#endif #endif
.name = "em2820", .name = "em28xx",
.id = I2C_HW_B_EM2820, .id = I2C_HW_B_EM28XX,
.algo = &em2820_algo, .algo = &em28xx_algo,
.client_register = attach_inform, .client_register = attach_inform,
}; };
static struct i2c_client em2820_client_template = { static struct i2c_client em28xx_client_template = {
.name = "em2820 internal", .name = "em28xx internal",
.flags = I2C_CLIENT_ALLOW_USE, .flags = I2C_CLIENT_ALLOW_USE,
}; };
...@@ -542,33 +542,33 @@ static void do_i2c_scan(char *name, struct i2c_client *c) ...@@ -542,33 +542,33 @@ static void do_i2c_scan(char *name, struct i2c_client *c)
} }
/* /*
* em2820_i2c_call_clients() * em28xx_i2c_call_clients()
* send commands to all attached i2c devices * send commands to all attached i2c devices
*/ */
void em2820_i2c_call_clients(struct em2820 *dev, unsigned int cmd, void *arg) void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg)
{ {
BUG_ON(NULL == dev->i2c_adap.algo_data); BUG_ON(NULL == dev->i2c_adap.algo_data);
i2c_clients_command(&dev->i2c_adap, cmd, arg); i2c_clients_command(&dev->i2c_adap, cmd, arg);
} }
/* /*
* em2820_i2c_register() * em28xx_i2c_register()
* register i2c bus * register i2c bus
*/ */
int em2820_i2c_register(struct em2820 *dev) int em28xx_i2c_register(struct em28xx *dev)
{ {
BUG_ON(!dev->em2820_write_regs || !dev->em2820_read_reg); BUG_ON(!dev->em28xx_write_regs || !dev->em28xx_read_reg);
BUG_ON(!dev->em2820_write_regs_req || !dev->em2820_read_reg_req); BUG_ON(!dev->em28xx_write_regs_req || !dev->em28xx_read_reg_req);
dev->i2c_adap = em2820_adap_template; dev->i2c_adap = em28xx_adap_template;
dev->i2c_adap.dev.parent = &dev->udev->dev; dev->i2c_adap.dev.parent = &dev->udev->dev;
strcpy(dev->i2c_adap.name, dev->name); strcpy(dev->i2c_adap.name, dev->name);
dev->i2c_adap.algo_data = dev; dev->i2c_adap.algo_data = dev;
i2c_add_adapter(&dev->i2c_adap); i2c_add_adapter(&dev->i2c_adap);
dev->i2c_client = em2820_client_template; dev->i2c_client = em28xx_client_template;
dev->i2c_client.adapter = &dev->i2c_adap; dev->i2c_client.adapter = &dev->i2c_adap;
em2820_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata)); em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
if (i2c_scan) if (i2c_scan)
do_i2c_scan(dev->name, &dev->i2c_client); do_i2c_scan(dev->name, &dev->i2c_client);
...@@ -576,10 +576,10 @@ int em2820_i2c_register(struct em2820 *dev) ...@@ -576,10 +576,10 @@ int em2820_i2c_register(struct em2820 *dev)
} }
/* /*
* em2820_i2c_unregister() * em28xx_i2c_unregister()
* unregister i2c_bus * unregister i2c_bus
*/ */
int em2820_i2c_unregister(struct em2820 *dev) int em28xx_i2c_unregister(struct em28xx *dev)
{ {
i2c_del_adapter(&dev->i2c_adap); i2c_del_adapter(&dev->i2c_adap);
return 0; return 0;
......
...@@ -142,7 +142,7 @@ static int get_key_em_haup(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) ...@@ -142,7 +142,7 @@ static int get_key_em_haup(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
} }
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
void em2820_set_ir(struct em2820 * dev,struct IR_i2c *ir) void em28xx_set_ir(struct em28xx * dev,struct IR_i2c *ir)
{ {
if (disable_ir) { if (disable_ir) {
ir->get_key=NULL; ir->get_key=NULL;
...@@ -159,7 +159,7 @@ void em2820_set_ir(struct em2820 * dev,struct IR_i2c *ir) ...@@ -159,7 +159,7 @@ void em2820_set_ir(struct em2820 * dev,struct IR_i2c *ir)
case (EM2820_BOARD_TERRATEC_CINERGY_250): case (EM2820_BOARD_TERRATEC_CINERGY_250):
ir->ir_codes = ir_codes_em_terratec; ir->ir_codes = ir_codes_em_terratec;
ir->get_key = get_key_terratec; ir->get_key = get_key_terratec;
snprintf(ir->c.name, sizeof(ir->c.name), "i2c IR (EM2820 Terratec)"); snprintf(ir->c.name, sizeof(ir->c.name), "i2c IR (EM28XX Terratec)");
break; break;
case (EM2820_BOARD_PINNACLE_USB_2): case (EM2820_BOARD_PINNACLE_USB_2):
break; break;
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/video_decoder.h> #include <linux/video_decoder.h>
#include <linux/utsname.h>
#include "em28xx.h" #include "em28xx.h"
#include <media/tuner.h> #include <media/tuner.h>
...@@ -39,9 +40,9 @@ ...@@ -39,9 +40,9 @@
#define DRIVER_NAME "em28xx" #define DRIVER_NAME "em28xx"
#define DRIVER_DESC "Empia em28xx based USB video device driver" #define DRIVER_DESC "Empia em28xx based USB video device driver"
#define EM2820_VERSION_CODE KERNEL_VERSION(0, 0, 1) #define EM28XX_VERSION_CODE KERNEL_VERSION(0, 0, 1)
#define em2820_videodbg(fmt, arg...) do {\ #define em28xx_videodbg(fmt, arg...) do {\
if (video_debug) \ if (video_debug) \
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __FUNCTION__ , ##arg); } while (0) dev->name, __FUNCTION__ , ##arg); } while (0)
...@@ -50,9 +51,9 @@ MODULE_AUTHOR(DRIVER_AUTHOR); ...@@ -50,9 +51,9 @@ MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
static LIST_HEAD(em2820_devlist); static LIST_HEAD(em28xx_devlist);
static unsigned int card[] = {[0 ... (EM2820_MAXBOARDS - 1)] = UNSET }; static unsigned int card[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
module_param_array(card, int, NULL, 0444); module_param_array(card, int, NULL, 0444);
MODULE_PARM_DESC(card,"card type"); MODULE_PARM_DESC(card,"card type");
...@@ -66,7 +67,7 @@ module_param(video_debug,int,0644); ...@@ -66,7 +67,7 @@ module_param(video_debug,int,0644);
MODULE_PARM_DESC(video_debug,"enable debug messages [video]"); MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
/* supported tv norms */ /* supported tv norms */
static struct em2820_tvnorm tvnorms[] = { static struct em28xx_tvnorm tvnorms[] = {
{ {
.name = "PAL", .name = "PAL",
.id = V4L2_STD_PAL, .id = V4L2_STD_PAL,
...@@ -106,7 +107,7 @@ static const unsigned char saa7114_i2c_init[] = { ...@@ -106,7 +107,7 @@ static const unsigned char saa7114_i2c_init[] = {
#define TVNORMS ARRAY_SIZE(tvnorms) #define TVNORMS ARRAY_SIZE(tvnorms)
/* supported controls */ /* supported controls */
static struct v4l2_queryctrl em2820_qctrl[] = { static struct v4l2_queryctrl em28xx_qctrl[] = {
{ {
.id = V4L2_CID_BRIGHTNESS, .id = V4L2_CID_BRIGHTNESS,
.type = V4L2_CTRL_TYPE_INTEGER, .type = V4L2_CTRL_TYPE_INTEGER,
...@@ -182,10 +183,10 @@ static struct v4l2_queryctrl em2820_qctrl[] = { ...@@ -182,10 +183,10 @@ static struct v4l2_queryctrl em2820_qctrl[] = {
} }
}; };
static struct usb_driver em2820_usb_driver; static struct usb_driver em28xx_usb_driver;
static DECLARE_MUTEX(em2820_sysfs_lock); static DECLARE_MUTEX(em28xx_sysfs_lock);
static DECLARE_RWSEM(em2820_disconnect); static DECLARE_RWSEM(em28xx_disconnect);
/********************* v4l2 interface ******************************************/ /********************* v4l2 interface ******************************************/
...@@ -200,95 +201,95 @@ static inline unsigned long kvirt_to_pa(unsigned long adr) ...@@ -200,95 +201,95 @@ static inline unsigned long kvirt_to_pa(unsigned long adr)
} }
/* /*
* em2820_config() * em28xx_config()
* inits registers with sane defaults * inits registers with sane defaults
*/ */
static int em2820_config(struct em2820 *dev) static int em28xx_config(struct em28xx *dev)
{ {
/* Sets I2C speed to 100 KHz */ /* Sets I2C speed to 100 KHz */
em2820_write_regs_req(dev, 0x00, 0x06, "\x40", 1); em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
/* enable vbi capturing */ /* enable vbi capturing */
em2820_audio_usb_mute(dev, 1); em28xx_audio_usb_mute(dev, 1);
dev->mute = 1; /* maybe not the right place... */ dev->mute = 1; /* maybe not the right place... */
dev->volume = 0x1f; dev->volume = 0x1f;
em2820_audio_analog_set(dev); em28xx_audio_analog_set(dev);
em2820_audio_analog_setup(dev); em28xx_audio_analog_setup(dev);
em2820_outfmt_set_yuv422(dev); em28xx_outfmt_set_yuv422(dev);
em2820_colorlevels_set_default(dev); em28xx_colorlevels_set_default(dev);
em2820_compression_disable(dev); em28xx_compression_disable(dev);
return 0; return 0;
} }
/* /*
* em2820_config_i2c() * em28xx_config_i2c()
* configure i2c attached devices * configure i2c attached devices
*/ */
void em2820_config_i2c(struct em2820 *dev) void em28xx_config_i2c(struct em28xx *dev)
{ {
struct v4l2_frequency f; struct v4l2_frequency f;
struct video_decoder_init em2820_vdi = {.data = NULL }; struct video_decoder_init em28xx_vdi = {.data = NULL };
/* configure decoder */ /* configure decoder */
if(dev->model == EM2820_BOARD_MSI_VOX_USB_2){ if(dev->model == EM2820_BOARD_MSI_VOX_USB_2){
em2820_vdi.data=saa7114_i2c_init; em28xx_vdi.data=saa7114_i2c_init;
em2820_vdi.len=sizeof(saa7114_i2c_init); em28xx_vdi.len=sizeof(saa7114_i2c_init);
} }
em2820_i2c_call_clients(dev, DECODER_INIT, &em2820_vdi); em28xx_i2c_call_clients(dev, DECODER_INIT, &em28xx_vdi);
em2820_i2c_call_clients(dev, DECODER_SET_INPUT, &dev->ctl_input); em28xx_i2c_call_clients(dev, DECODER_SET_INPUT, &dev->ctl_input);
/* em2820_i2c_call_clients(dev,DECODER_SET_PICTURE, &dev->vpic); */ /* em28xx_i2c_call_clients(dev,DECODER_SET_PICTURE, &dev->vpic); */
/* em2820_i2c_call_clients(dev,DECODER_SET_NORM,&dev->tvnorm->id); */ /* em28xx_i2c_call_clients(dev,DECODER_SET_NORM,&dev->tvnorm->id); */
/* em2820_i2c_call_clients(dev,DECODER_ENABLE_OUTPUT,&output); */ /* em28xx_i2c_call_clients(dev,DECODER_ENABLE_OUTPUT,&output); */
/* em2820_i2c_call_clients(dev,DECODER_DUMP, NULL); */ /* em28xx_i2c_call_clients(dev,DECODER_DUMP, NULL); */
/* configure tuner */ /* configure tuner */
f.tuner = 0; f.tuner = 0;
f.type = V4L2_TUNER_ANALOG_TV; f.type = V4L2_TUNER_ANALOG_TV;
f.frequency = 9076; /* FIXME:remove magic number */ f.frequency = 9076; /* FIXME:remove magic number */
dev->ctl_freq = f.frequency; dev->ctl_freq = f.frequency;
em2820_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, &f); em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, &f);
/* configure tda9887 */ /* configure tda9887 */
/* em2820_i2c_call_clients(dev,VIDIOC_S_STD,&dev->tvnorm->id); */ /* em28xx_i2c_call_clients(dev,VIDIOC_S_STD,&dev->tvnorm->id); */
} }
/* /*
* em2820_empty_framequeues() * em28xx_empty_framequeues()
* prepare queues for incoming and outgoing frames * prepare queues for incoming and outgoing frames
*/ */
static void em2820_empty_framequeues(struct em2820 *dev) static void em28xx_empty_framequeues(struct em28xx *dev)
{ {
u32 i; u32 i;
INIT_LIST_HEAD(&dev->inqueue); INIT_LIST_HEAD(&dev->inqueue);
INIT_LIST_HEAD(&dev->outqueue); INIT_LIST_HEAD(&dev->outqueue);
for (i = 0; i < EM2820_NUM_FRAMES; i++) { for (i = 0; i < EM28XX_NUM_FRAMES; i++) {
dev->frame[i].state = F_UNUSED; dev->frame[i].state = F_UNUSED;
dev->frame[i].buf.bytesused = 0; dev->frame[i].buf.bytesused = 0;
} }
} }
/* /*
* em2820_v4l2_open() * em28xx_v4l2_open()
* inits the device and starts isoc transfer * inits the device and starts isoc transfer
*/ */
static int em2820_v4l2_open(struct inode *inode, struct file *filp) static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
{ {
int minor = iminor(inode); int minor = iminor(inode);
int errCode = 0; int errCode = 0;
struct em2820 *h,*dev = NULL; struct em28xx *h,*dev = NULL;
struct list_head *list; struct list_head *list;
list_for_each(list,&em2820_devlist) { list_for_each(list,&em28xx_devlist) {
h = list_entry(list, struct em2820, devlist); h = list_entry(list, struct em28xx, devlist);
if (h->vdev->minor == minor) { if (h->vdev->minor == minor) {
dev = h; dev = h;
} }
...@@ -297,14 +298,14 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp) ...@@ -297,14 +298,14 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp)
filp->private_data=dev; filp->private_data=dev;
em2820_videodbg("users=%d", dev->users); em28xx_videodbg("users=%d", dev->users);
if (!down_read_trylock(&em2820_disconnect)) if (!down_read_trylock(&em28xx_disconnect))
return -ERESTARTSYS; return -ERESTARTSYS;
if (dev->users) { if (dev->users) {
em2820_warn("this driver can be opened only once\n"); em28xx_warn("this driver can be opened only once\n");
up_read(&em2820_disconnect); up_read(&em28xx_disconnect);
return -EBUSY; return -EBUSY;
} }
...@@ -322,7 +323,7 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp) ...@@ -322,7 +323,7 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp)
down(&dev->lock); down(&dev->lock);
em2820_set_alternate(dev); em28xx_set_alternate(dev);
dev->width = norm_maxw(dev); dev->width = norm_maxw(dev);
dev->height = norm_maxh(dev); dev->height = norm_maxh(dev);
...@@ -332,11 +333,11 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp) ...@@ -332,11 +333,11 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp)
dev->hscale = 0; dev->hscale = 0;
dev->vscale = 0; dev->vscale = 0;
em2820_capture_start(dev, 1); em28xx_capture_start(dev, 1);
em2820_resolution_set(dev); em28xx_resolution_set(dev);
/* start the transfer */ /* start the transfer */
errCode = em2820_init_isoc(dev); errCode = em28xx_init_isoc(dev);
if (errCode) if (errCode)
goto err; goto err;
...@@ -347,55 +348,55 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp) ...@@ -347,55 +348,55 @@ static int em2820_v4l2_open(struct inode *inode, struct file *filp)
dev->num_frames = 0; dev->num_frames = 0;
/* prepare queues */ /* prepare queues */
em2820_empty_framequeues(dev); em28xx_empty_framequeues(dev);
dev->state |= DEV_INITIALIZED; dev->state |= DEV_INITIALIZED;
err: err:
up(&dev->lock); up(&dev->lock);
up_read(&em2820_disconnect); up_read(&em28xx_disconnect);
return errCode; return errCode;
} }
/* /*
* em2820_realease_resources() * em28xx_realease_resources()
* unregisters the v4l2,i2c and usb devices * unregisters the v4l2,i2c and usb devices
* called when the device gets disconected or at module unload * called when the device gets disconected or at module unload
*/ */
static void em2820_release_resources(struct em2820 *dev) static void em28xx_release_resources(struct em28xx *dev)
{ {
down(&em2820_sysfs_lock); down(&em28xx_sysfs_lock);
em2820_info("V4L2 device /dev/video%d deregistered\n", em28xx_info("V4L2 device /dev/video%d deregistered\n",
dev->vdev->minor); dev->vdev->minor);
list_del(&dev->devlist); list_del(&dev->devlist);
video_unregister_device(dev->vdev); video_unregister_device(dev->vdev);
/* video_unregister_device(dev->vbi_dev); */ /* video_unregister_device(dev->vbi_dev); */
em2820_i2c_unregister(dev); em28xx_i2c_unregister(dev);
usb_put_dev(dev->udev); usb_put_dev(dev->udev);
up(&em2820_sysfs_lock); up(&em28xx_sysfs_lock);
} }
/* /*
* em2820_v4l2_close() * em28xx_v4l2_close()
* stops streaming and deallocates all resources allocated by the v4l2 calls and ioctls * stops streaming and deallocates all resources allocated by the v4l2 calls and ioctls
*/ */
static int em2820_v4l2_close(struct inode *inode, struct file *filp) static int em28xx_v4l2_close(struct inode *inode, struct file *filp)
{ {
int errCode; int errCode;
struct em2820 *dev=filp->private_data; struct em28xx *dev=filp->private_data;
em2820_videodbg("users=%d", dev->users); em28xx_videodbg("users=%d", dev->users);
down(&dev->lock); down(&dev->lock);
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
em2820_release_buffers(dev); em28xx_release_buffers(dev);
/* the device is already disconnect, free the remaining resources */ /* the device is already disconnect, free the remaining resources */
if (dev->state & DEV_DISCONNECTED) { if (dev->state & DEV_DISCONNECTED) {
em2820_release_resources(dev); em28xx_release_resources(dev);
up(&dev->lock); up(&dev->lock);
kfree(dev); kfree(dev);
return 0; return 0;
...@@ -403,10 +404,10 @@ static int em2820_v4l2_close(struct inode *inode, struct file *filp) ...@@ -403,10 +404,10 @@ static int em2820_v4l2_close(struct inode *inode, struct file *filp)
/* set alternate 0 */ /* set alternate 0 */
dev->alt = 0; dev->alt = 0;
em2820_videodbg("setting alternate 0"); em28xx_videodbg("setting alternate 0");
errCode = usb_set_interface(dev->udev, 0, 0); errCode = usb_set_interface(dev->udev, 0, 0);
if (errCode < 0) { if (errCode < 0) {
em2820_errdev ("cannot change alternate number to 0 (error=%i)\n", em28xx_errdev ("cannot change alternate number to 0 (error=%i)\n",
errCode); errCode);
} }
...@@ -417,49 +418,49 @@ static int em2820_v4l2_close(struct inode *inode, struct file *filp) ...@@ -417,49 +418,49 @@ static int em2820_v4l2_close(struct inode *inode, struct file *filp)
} }
/* /*
* em2820_v4l2_read() * em28xx_v4l2_read()
* will allocate buffers when called for the first time * will allocate buffers when called for the first time
*/ */
static ssize_t static ssize_t
em2820_v4l2_read(struct file *filp, char __user * buf, size_t count, em28xx_v4l2_read(struct file *filp, char __user * buf, size_t count,
loff_t * f_pos) loff_t * f_pos)
{ {
struct em2820_frame_t *f, *i; struct em28xx_frame_t *f, *i;
unsigned long lock_flags; unsigned long lock_flags;
int ret = 0; int ret = 0;
struct em2820 *dev = filp->private_data; struct em28xx *dev = filp->private_data;
if (down_interruptible(&dev->fileop_lock)) if (down_interruptible(&dev->fileop_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
if (dev->state & DEV_DISCONNECTED) { if (dev->state & DEV_DISCONNECTED) {
em2820_videodbg("device not present"); em28xx_videodbg("device not present");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -ENODEV; return -ENODEV;
} }
if (dev->state & DEV_MISCONFIGURED) { if (dev->state & DEV_MISCONFIGURED) {
em2820_videodbg("device misconfigured; close and open it again"); em28xx_videodbg("device misconfigured; close and open it again");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EIO; return -EIO;
} }
if (dev->io == IO_MMAP) { if (dev->io == IO_MMAP) {
em2820_videodbg ("IO method is set to mmap; close and open" em28xx_videodbg ("IO method is set to mmap; close and open"
" the device again to choose the read method"); " the device again to choose the read method");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EINVAL; return -EINVAL;
} }
if (dev->io == IO_NONE) { if (dev->io == IO_NONE) {
if (!em2820_request_buffers(dev, EM2820_NUM_READ_FRAMES)) { if (!em28xx_request_buffers(dev, EM28XX_NUM_READ_FRAMES)) {
em2820_errdev("read failed, not enough memory\n"); em28xx_errdev("read failed, not enough memory\n");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -ENOMEM; return -ENOMEM;
} }
dev->io = IO_READ; dev->io = IO_READ;
dev->stream = STREAM_ON; dev->stream = STREAM_ON;
em2820_queue_unusedframes(dev); em28xx_queue_unusedframes(dev);
} }
if (!count) { if (!count) {
...@@ -486,7 +487,7 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count, ...@@ -486,7 +487,7 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count,
} }
} }
f = list_entry(dev->outqueue.prev, struct em2820_frame_t, frame); f = list_entry(dev->outqueue.prev, struct em28xx_frame_t, frame);
spin_lock_irqsave(&dev->queue_lock, lock_flags); spin_lock_irqsave(&dev->queue_lock, lock_flags);
list_for_each_entry(i, &dev->outqueue, frame) list_for_each_entry(i, &dev->outqueue, frame)
...@@ -494,7 +495,7 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count, ...@@ -494,7 +495,7 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count,
INIT_LIST_HEAD(&dev->outqueue); INIT_LIST_HEAD(&dev->outqueue);
spin_unlock_irqrestore(&dev->queue_lock, lock_flags); spin_unlock_irqrestore(&dev->queue_lock, lock_flags);
em2820_queue_unusedframes(dev); em28xx_queue_unusedframes(dev);
if (count > f->buf.length) if (count > f->buf.length)
count = f->buf.length; count = f->buf.length;
...@@ -511,26 +512,26 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count, ...@@ -511,26 +512,26 @@ em2820_v4l2_read(struct file *filp, char __user * buf, size_t count,
} }
/* /*
* em2820_v4l2_poll() * em28xx_v4l2_poll()
* will allocate buffers when called for the first time * will allocate buffers when called for the first time
*/ */
static unsigned int em2820_v4l2_poll(struct file *filp, poll_table * wait) static unsigned int em28xx_v4l2_poll(struct file *filp, poll_table * wait)
{ {
unsigned int mask = 0; unsigned int mask = 0;
struct em2820 *dev = filp->private_data; struct em28xx *dev = filp->private_data;
if (down_interruptible(&dev->fileop_lock)) if (down_interruptible(&dev->fileop_lock))
return POLLERR; return POLLERR;
if (dev->state & DEV_DISCONNECTED) { if (dev->state & DEV_DISCONNECTED) {
em2820_videodbg("device not present"); em28xx_videodbg("device not present");
} else if (dev->state & DEV_MISCONFIGURED) { } else if (dev->state & DEV_MISCONFIGURED) {
em2820_videodbg("device is misconfigured; close and open it again"); em28xx_videodbg("device is misconfigured; close and open it again");
} else { } else {
if (dev->io == IO_NONE) { if (dev->io == IO_NONE) {
if (!em2820_request_buffers if (!em28xx_request_buffers
(dev, EM2820_NUM_READ_FRAMES)) { (dev, EM28XX_NUM_READ_FRAMES)) {
em2820_warn em28xx_warn
("poll() failed, not enough memory\n"); ("poll() failed, not enough memory\n");
} else { } else {
dev->io = IO_READ; dev->io = IO_READ;
...@@ -539,7 +540,7 @@ static unsigned int em2820_v4l2_poll(struct file *filp, poll_table * wait) ...@@ -539,7 +540,7 @@ static unsigned int em2820_v4l2_poll(struct file *filp, poll_table * wait)
} }
if (dev->io == IO_READ) { if (dev->io == IO_READ) {
em2820_queue_unusedframes(dev); em28xx_queue_unusedframes(dev);
poll_wait(filp, &dev->wait_frame, wait); poll_wait(filp, &dev->wait_frame, wait);
if (!list_empty(&dev->outqueue)) if (!list_empty(&dev->outqueue))
...@@ -556,51 +557,51 @@ static unsigned int em2820_v4l2_poll(struct file *filp, poll_table * wait) ...@@ -556,51 +557,51 @@ static unsigned int em2820_v4l2_poll(struct file *filp, poll_table * wait)
} }
/* /*
* em2820_vm_open() * em28xx_vm_open()
*/ */
static void em2820_vm_open(struct vm_area_struct *vma) static void em28xx_vm_open(struct vm_area_struct *vma)
{ {
struct em2820_frame_t *f = vma->vm_private_data; struct em28xx_frame_t *f = vma->vm_private_data;
f->vma_use_count++; f->vma_use_count++;
} }
/* /*
* em2820_vm_close() * em28xx_vm_close()
*/ */
static void em2820_vm_close(struct vm_area_struct *vma) static void em28xx_vm_close(struct vm_area_struct *vma)
{ {
/* NOTE: buffers are not freed here */ /* NOTE: buffers are not freed here */
struct em2820_frame_t *f = vma->vm_private_data; struct em28xx_frame_t *f = vma->vm_private_data;
f->vma_use_count--; f->vma_use_count--;
} }
static struct vm_operations_struct em2820_vm_ops = { static struct vm_operations_struct em28xx_vm_ops = {
.open = em2820_vm_open, .open = em28xx_vm_open,
.close = em2820_vm_close, .close = em28xx_vm_close,
}; };
/* /*
* em2820_v4l2_mmap() * em28xx_v4l2_mmap()
*/ */
static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma) static int em28xx_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
{ {
unsigned long size = vma->vm_end - vma->vm_start, unsigned long size = vma->vm_end - vma->vm_start,
start = vma->vm_start, pos, page; start = vma->vm_start, pos, page;
u32 i; u32 i;
struct em2820 *dev = filp->private_data; struct em28xx *dev = filp->private_data;
if (down_interruptible(&dev->fileop_lock)) if (down_interruptible(&dev->fileop_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
if (dev->state & DEV_DISCONNECTED) { if (dev->state & DEV_DISCONNECTED) {
em2820_videodbg("mmap: device not present"); em28xx_videodbg("mmap: device not present");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -ENODEV; return -ENODEV;
} }
if (dev->state & DEV_MISCONFIGURED) { if (dev->state & DEV_MISCONFIGURED) {
em2820_videodbg ("mmap: Device is misconfigured; close and " em28xx_videodbg ("mmap: Device is misconfigured; close and "
"open it again"); "open it again");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EIO; return -EIO;
...@@ -617,7 +618,7 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma) ...@@ -617,7 +618,7 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
break; break;
} }
if (i == dev->num_frames) { if (i == dev->num_frames) {
em2820_videodbg("mmap: user supplied mapping address is out of range"); em28xx_videodbg("mmap: user supplied mapping address is out of range");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EINVAL; return -EINVAL;
} }
...@@ -631,7 +632,7 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma) ...@@ -631,7 +632,7 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
page = vmalloc_to_pfn((void *)pos); page = vmalloc_to_pfn((void *)pos);
if (remap_pfn_range(vma, start, page, PAGE_SIZE, if (remap_pfn_range(vma, start, page, PAGE_SIZE,
vma->vm_page_prot)) { vma->vm_page_prot)) {
em2820_videodbg("mmap: rename page map failed"); em28xx_videodbg("mmap: rename page map failed");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EAGAIN; return -EAGAIN;
} }
...@@ -640,19 +641,19 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma) ...@@ -640,19 +641,19 @@ static int em2820_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
size -= PAGE_SIZE; size -= PAGE_SIZE;
} }
vma->vm_ops = &em2820_vm_ops; vma->vm_ops = &em28xx_vm_ops;
vma->vm_private_data = &dev->frame[i]; vma->vm_private_data = &dev->frame[i];
em2820_vm_open(vma); em28xx_vm_open(vma);
up(&dev->fileop_lock); up(&dev->fileop_lock);
return 0; return 0;
} }
/* /*
* em2820_get_ctrl() * em28xx_get_ctrl()
* return the current saturation, brightness or contrast, mute state * return the current saturation, brightness or contrast, mute state
*/ */
static int em2820_get_ctrl(struct em2820 *dev, struct v4l2_control *ctrl) static int em28xx_get_ctrl(struct em28xx *dev, struct v4l2_control *ctrl)
{ {
s32 tmp; s32 tmp;
switch (ctrl->id) { switch (ctrl->id) {
...@@ -663,30 +664,30 @@ static int em2820_get_ctrl(struct em2820 *dev, struct v4l2_control *ctrl) ...@@ -663,30 +664,30 @@ static int em2820_get_ctrl(struct em2820 *dev, struct v4l2_control *ctrl)
ctrl->value = dev->volume; ctrl->value = dev->volume;
return 0; return 0;
case V4L2_CID_BRIGHTNESS: case V4L2_CID_BRIGHTNESS:
if ((tmp = em2820_brightness_get(dev)) < 0) if ((tmp = em28xx_brightness_get(dev)) < 0)
return -EIO; return -EIO;
ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */ ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */
return 0; return 0;
case V4L2_CID_CONTRAST: case V4L2_CID_CONTRAST:
if ((ctrl->value = em2820_contrast_get(dev)) < 0) if ((ctrl->value = em28xx_contrast_get(dev)) < 0)
return -EIO; return -EIO;
return 0; return 0;
case V4L2_CID_SATURATION: case V4L2_CID_SATURATION:
if ((ctrl->value = em2820_saturation_get(dev)) < 0) if ((ctrl->value = em28xx_saturation_get(dev)) < 0)
return -EIO; return -EIO;
return 0; return 0;
case V4L2_CID_RED_BALANCE: case V4L2_CID_RED_BALANCE:
if ((tmp = em2820_v_balance_get(dev)) < 0) if ((tmp = em28xx_v_balance_get(dev)) < 0)
return -EIO; return -EIO;
ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */ ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */
return 0; return 0;
case V4L2_CID_BLUE_BALANCE: case V4L2_CID_BLUE_BALANCE:
if ((tmp = em2820_u_balance_get(dev)) < 0) if ((tmp = em28xx_u_balance_get(dev)) < 0)
return -EIO; return -EIO;
ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */ ctrl->value = (s32) ((s8) tmp); /* FIXME: clenaer way to extend sign? */
return 0; return 0;
case V4L2_CID_GAMMA: case V4L2_CID_GAMMA:
if ((ctrl->value = em2820_gamma_get(dev)) < 0) if ((ctrl->value = em28xx_gamma_get(dev)) < 0)
return -EIO; return -EIO;
return 0; return 0;
default: default:
...@@ -695,44 +696,44 @@ static int em2820_get_ctrl(struct em2820 *dev, struct v4l2_control *ctrl) ...@@ -695,44 +696,44 @@ static int em2820_get_ctrl(struct em2820 *dev, struct v4l2_control *ctrl)
} }
/* /*
* em2820_set_ctrl() * em28xx_set_ctrl()
* mute or set new saturation, brightness or contrast * mute or set new saturation, brightness or contrast
*/ */
static int em2820_set_ctrl(struct em2820 *dev, const struct v4l2_control *ctrl) static int em28xx_set_ctrl(struct em28xx *dev, const struct v4l2_control *ctrl)
{ {
switch (ctrl->id) { switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE: case V4L2_CID_AUDIO_MUTE:
if (ctrl->value != dev->mute) { if (ctrl->value != dev->mute) {
dev->mute = ctrl->value; dev->mute = ctrl->value;
em2820_audio_usb_mute(dev, ctrl->value); em28xx_audio_usb_mute(dev, ctrl->value);
return em2820_audio_analog_set(dev); return em28xx_audio_analog_set(dev);
} }
return 0; return 0;
case V4L2_CID_AUDIO_VOLUME: case V4L2_CID_AUDIO_VOLUME:
dev->volume = ctrl->value; dev->volume = ctrl->value;
return em2820_audio_analog_set(dev); return em28xx_audio_analog_set(dev);
case V4L2_CID_BRIGHTNESS: case V4L2_CID_BRIGHTNESS:
return em2820_brightness_set(dev, ctrl->value); return em28xx_brightness_set(dev, ctrl->value);
case V4L2_CID_CONTRAST: case V4L2_CID_CONTRAST:
return em2820_contrast_set(dev, ctrl->value); return em28xx_contrast_set(dev, ctrl->value);
case V4L2_CID_SATURATION: case V4L2_CID_SATURATION:
return em2820_saturation_set(dev, ctrl->value); return em28xx_saturation_set(dev, ctrl->value);
case V4L2_CID_RED_BALANCE: case V4L2_CID_RED_BALANCE:
return em2820_v_balance_set(dev, ctrl->value); return em28xx_v_balance_set(dev, ctrl->value);
case V4L2_CID_BLUE_BALANCE: case V4L2_CID_BLUE_BALANCE:
return em2820_u_balance_set(dev, ctrl->value); return em28xx_u_balance_set(dev, ctrl->value);
case V4L2_CID_GAMMA: case V4L2_CID_GAMMA:
return em2820_gamma_set(dev, ctrl->value); return em28xx_gamma_set(dev, ctrl->value);
default: default:
return -EINVAL; return -EINVAL;
} }
} }
/* /*
* em2820_stream_interrupt() * em28xx_stream_interrupt()
* stops streaming * stops streaming
*/ */
static int em2820_stream_interrupt(struct em2820 *dev) static int em28xx_stream_interrupt(struct em28xx *dev)
{ {
int ret = 0; int ret = 0;
...@@ -742,12 +743,12 @@ static int em2820_stream_interrupt(struct em2820 *dev) ...@@ -742,12 +743,12 @@ static int em2820_stream_interrupt(struct em2820 *dev)
ret = wait_event_timeout(dev->wait_stream, ret = wait_event_timeout(dev->wait_stream,
(dev->stream == STREAM_OFF) || (dev->stream == STREAM_OFF) ||
(dev->state & DEV_DISCONNECTED), (dev->state & DEV_DISCONNECTED),
EM2820_URB_TIMEOUT); EM28XX_URB_TIMEOUT);
if (dev->state & DEV_DISCONNECTED) if (dev->state & DEV_DISCONNECTED)
return -ENODEV; return -ENODEV;
else if (ret) { else if (ret) {
dev->state |= DEV_MISCONFIGURED; dev->state |= DEV_MISCONFIGURED;
em2820_videodbg("device is misconfigured; close and " em28xx_videodbg("device is misconfigured; close and "
"open /dev/video%d again", dev->vdev->minor); "open /dev/video%d again", dev->vdev->minor);
return ret; return ret;
} }
...@@ -755,7 +756,7 @@ static int em2820_stream_interrupt(struct em2820 *dev) ...@@ -755,7 +756,7 @@ static int em2820_stream_interrupt(struct em2820 *dev)
return 0; return 0;
} }
static int em2820_set_norm(struct em2820 *dev, int width, int height) static int em28xx_set_norm(struct em28xx *dev, int width, int height)
{ {
unsigned int hscale, vscale; unsigned int hscale, vscale;
unsigned int maxh, maxw; unsigned int maxh, maxw;
...@@ -794,41 +795,41 @@ static int em2820_set_norm(struct em2820 *dev, int width, int height) ...@@ -794,41 +795,41 @@ static int em2820_set_norm(struct em2820 *dev, int width, int height)
dev->hscale = hscale; dev->hscale = hscale;
dev->vscale = vscale; dev->vscale = vscale;
em2820_resolution_set(dev); em28xx_resolution_set(dev);
return 0; return 0;
} }
static void video_mux(struct em2820 *dev, int index) static void video_mux(struct em28xx *dev, int index)
{ {
int input, ainput; int input, ainput;
input = INPUT(index)->vmux; input = INPUT(index)->vmux;
dev->ctl_input = index; dev->ctl_input = index;
em2820_i2c_call_clients(dev, DECODER_SET_INPUT, &input); em28xx_i2c_call_clients(dev, DECODER_SET_INPUT, &input);
dev->ctl_ainput = INPUT(index)->amux; dev->ctl_ainput = INPUT(index)->amux;
switch (dev->ctl_ainput) { switch (dev->ctl_ainput) {
case 0: case 0:
ainput = EM2820_AUDIO_SRC_TUNER; ainput = EM28XX_AUDIO_SRC_TUNER;
break; break;
default: default:
ainput = EM2820_AUDIO_SRC_LINE; ainput = EM28XX_AUDIO_SRC_LINE;
} }
em2820_audio_source(dev, ainput); em28xx_audio_source(dev, ainput);
} }
/* /*
* em2820_v4l2_do_ioctl() * em28xx_v4l2_do_ioctl()
* This function is _not_ called directly, but from * This function is _not_ called directly, but from
* em2820_v4l2_ioctl. Userspace * em28xx_v4l2_ioctl. Userspace
* copying is done already, arg is a kernel pointer. * copying is done already, arg is a kernel pointer.
*/ */
static int em2820_do_ioctl(struct inode *inode, struct file *filp, static int em28xx_do_ioctl(struct inode *inode, struct file *filp,
struct em2820 *dev, unsigned int cmd, void *arg, struct em28xx *dev, unsigned int cmd, void *arg,
v4l2_kioctl driver_ioctl) v4l2_kioctl driver_ioctl)
{ {
int ret; int ret;
...@@ -875,7 +876,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -875,7 +876,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
down(&dev->lock); down(&dev->lock);
dev->tvnorm = &tvnorms[i]; dev->tvnorm = &tvnorms[i];
em2820_set_norm(dev, dev->width, dev->height); em28xx_set_norm(dev, dev->width, dev->height);
/* /*
dev->width=norm_maxw(dev); dev->width=norm_maxw(dev);
...@@ -886,18 +887,18 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -886,18 +887,18 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
dev->hscale=0; dev->hscale=0;
dev->vscale=0; dev->vscale=0;
em2820_resolution_set(dev); em28xx_resolution_set(dev);
*/ */
/* /*
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
em2820_set_alternate(dev); em28xx_set_alternate(dev);
em2820_capture_start(dev, 1); em28xx_capture_start(dev, 1);
em2820_resolution_set(dev); em28xx_resolution_set(dev);
em2820_init_isoc(dev); em28xx_init_isoc(dev);
*/ */
em2820_i2c_call_clients(dev, DECODER_SET_NORM, em28xx_i2c_call_clients(dev, DECODER_SET_NORM,
&tvnorms[i].mode); &tvnorms[i].mode);
em2820_i2c_call_clients(dev, VIDIOC_S_STD, em28xx_i2c_call_clients(dev, VIDIOC_S_STD,
&dev->tvnorm->id); &dev->tvnorm->id);
up(&dev->lock); up(&dev->lock);
...@@ -911,19 +912,19 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -911,19 +912,19 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
struct v4l2_input *i = arg; struct v4l2_input *i = arg;
unsigned int n; unsigned int n;
static const char *iname[] = { static const char *iname[] = {
[EM2820_VMUX_COMPOSITE1] = "Composite1", [EM28XX_VMUX_COMPOSITE1] = "Composite1",
[EM2820_VMUX_COMPOSITE2] = "Composite2", [EM28XX_VMUX_COMPOSITE2] = "Composite2",
[EM2820_VMUX_COMPOSITE3] = "Composite3", [EM28XX_VMUX_COMPOSITE3] = "Composite3",
[EM2820_VMUX_COMPOSITE4] = "Composite4", [EM28XX_VMUX_COMPOSITE4] = "Composite4",
[EM2820_VMUX_SVIDEO] = "S-Video", [EM28XX_VMUX_SVIDEO] = "S-Video",
[EM2820_VMUX_TELEVISION] = "Television", [EM28XX_VMUX_TELEVISION] = "Television",
[EM2820_VMUX_CABLE] = "Cable TV", [EM28XX_VMUX_CABLE] = "Cable TV",
[EM2820_VMUX_DVB] = "DVB", [EM28XX_VMUX_DVB] = "DVB",
[EM2820_VMUX_DEBUG] = "for debug only", [EM28XX_VMUX_DEBUG] = "for debug only",
}; };
n = i->index; n = i->index;
if (n >= MAX_EM2820_INPUT) if (n >= MAX_EM28XX_INPUT)
return -EINVAL; return -EINVAL;
if (0 == INPUT(n)->type) if (0 == INPUT(n)->type)
return -EINVAL; return -EINVAL;
...@@ -931,8 +932,8 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -931,8 +932,8 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
i->index = n; i->index = n;
i->type = V4L2_INPUT_TYPE_CAMERA; i->type = V4L2_INPUT_TYPE_CAMERA;
strcpy(i->name, iname[INPUT(n)->type]); strcpy(i->name, iname[INPUT(n)->type]);
if ((EM2820_VMUX_TELEVISION == INPUT(n)->type) || if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
(EM2820_VMUX_CABLE == INPUT(n)->type)) (EM28XX_VMUX_CABLE == INPUT(n)->type))
i->type = V4L2_INPUT_TYPE_TUNER; i->type = V4L2_INPUT_TYPE_TUNER;
for (n = 0; n < ARRAY_SIZE(tvnorms); n++) for (n = 0; n < ARRAY_SIZE(tvnorms); n++)
i->std |= tvnorms[n].id; i->std |= tvnorms[n].id;
...@@ -951,7 +952,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -951,7 +952,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
{ {
int *index = arg; int *index = arg;
if (*index >= MAX_EM2820_INPUT) if (*index >= MAX_EM28XX_INPUT)
return -EINVAL; return -EINVAL;
if (0 == INPUT(*index)->type) if (0 == INPUT(*index)->type)
return -EINVAL; return -EINVAL;
...@@ -997,10 +998,10 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -997,10 +998,10 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
{ {
struct v4l2_queryctrl *qc = arg; struct v4l2_queryctrl *qc = arg;
u8 i, n; u8 i, n;
n = sizeof(em2820_qctrl) / sizeof(em2820_qctrl[0]); n = sizeof(em28xx_qctrl) / sizeof(em28xx_qctrl[0]);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
if (qc->id && qc->id == em2820_qctrl[i].id) { if (qc->id && qc->id == em28xx_qctrl[i].id) {
memcpy(qc, &(em2820_qctrl[i]), memcpy(qc, &(em28xx_qctrl[i]),
sizeof(*qc)); sizeof(*qc));
return 0; return 0;
} }
...@@ -1013,7 +1014,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1013,7 +1014,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
struct v4l2_control *ctrl = arg; struct v4l2_control *ctrl = arg;
return em2820_get_ctrl(dev, ctrl); return em28xx_get_ctrl(dev, ctrl);
} }
case VIDIOC_S_CTRL_OLD: /* ??? */ case VIDIOC_S_CTRL_OLD: /* ??? */
...@@ -1023,16 +1024,16 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1023,16 +1024,16 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
u8 i, n; u8 i, n;
n = sizeof(em2820_qctrl) / sizeof(em2820_qctrl[0]); n = sizeof(em28xx_qctrl) / sizeof(em28xx_qctrl[0]);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
if (ctrl->id == em2820_qctrl[i].id) { if (ctrl->id == em28xx_qctrl[i].id) {
if (ctrl->value < if (ctrl->value <
em2820_qctrl[i].minimum em28xx_qctrl[i].minimum
|| ctrl->value > || ctrl->value >
em2820_qctrl[i].maximum) em28xx_qctrl[i].maximum)
return -ERANGE; return -ERANGE;
return em2820_set_ctrl(dev, ctrl); return em28xx_set_ctrl(dev, ctrl);
} }
return -EINVAL; return -EINVAL;
} }
...@@ -1052,16 +1053,16 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1052,16 +1053,16 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
t->capability = V4L2_TUNER_CAP_NORM; t->capability = V4L2_TUNER_CAP_NORM;
t->rangehigh = 0xffffffffUL; /* FIXME: set correct range */ t->rangehigh = 0xffffffffUL; /* FIXME: set correct range */
/* t->signal = 0xffff;*/ /* t->signal = 0xffff;*/
/* em2820_i2c_call_clients(dev,VIDIOC_G_TUNER,t);*/ /* em28xx_i2c_call_clients(dev,VIDIOC_G_TUNER,t);*/
/* No way to get signal strength? */ /* No way to get signal strength? */
down(&dev->lock); down(&dev->lock);
em2820_i2c_call_clients(dev, DECODER_GET_STATUS, em28xx_i2c_call_clients(dev, DECODER_GET_STATUS,
&status); &status);
up(&dev->lock); up(&dev->lock);
t->signal = t->signal =
(status & DECODER_STATUS_GOOD) != 0 ? 0xffff : 0; (status & DECODER_STATUS_GOOD) != 0 ? 0xffff : 0;
em2820_videodbg("VIDIO_G_TUNER: signal=%x, afc=%x", t->signal, em28xx_videodbg("VIDIO_G_TUNER: signal=%x, afc=%x", t->signal,
t->afc); t->afc);
return 0; return 0;
} }
...@@ -1080,13 +1081,13 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1080,13 +1081,13 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
/* t->signal = 0xffff; */ /* t->signal = 0xffff; */
/* No way to get signal strength? */ /* No way to get signal strength? */
down(&dev->lock); down(&dev->lock);
em2820_i2c_call_clients(dev, DECODER_GET_STATUS, em28xx_i2c_call_clients(dev, DECODER_GET_STATUS,
&status); &status);
up(&dev->lock); up(&dev->lock);
t->signal = t->signal =
(status & DECODER_STATUS_GOOD) != 0 ? 0xffff : 0; (status & DECODER_STATUS_GOOD) != 0 ? 0xffff : 0;
em2820_videodbg("VIDIO_S_TUNER: signal=%x, afc=%x\n", em28xx_videodbg("VIDIO_S_TUNER: signal=%x, afc=%x\n",
t->signal, t->afc); t->signal, t->afc);
return 0; return 0;
} }
...@@ -1112,7 +1113,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1112,7 +1113,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
down(&dev->lock); down(&dev->lock);
dev->ctl_freq = f->frequency; dev->ctl_freq = f->frequency;
em2820_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, f); em28xx_i2c_call_clients(dev, VIDIOC_S_FREQUENCY, f);
up(&dev->lock); up(&dev->lock);
return 0; return 0;
} }
...@@ -1145,7 +1146,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1145,7 +1146,7 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
dev->stream = STREAM_ON; /* FIXME: Start video capture here? */ dev->stream = STREAM_ON; /* FIXME: Start video capture here? */
em2820_videodbg("VIDIOC_STREAMON: starting stream"); em28xx_videodbg("VIDIOC_STREAMON: starting stream");
return 0; return 0;
} }
...@@ -1159,11 +1160,11 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1159,11 +1160,11 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
return -EINVAL; return -EINVAL;
if (dev->stream == STREAM_ON) { if (dev->stream == STREAM_ON) {
em2820_videodbg ("VIDIOC_STREAMOFF: interrupting stream"); em28xx_videodbg ("VIDIOC_STREAMOFF: interrupting stream");
if ((ret = em2820_stream_interrupt(dev))) if ((ret = em28xx_stream_interrupt(dev)))
return ret; return ret;
} }
em2820_empty_framequeues(dev); em28xx_empty_framequeues(dev);
return 0; return 0;
} }
...@@ -1175,21 +1176,21 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1175,21 +1176,21 @@ static int em2820_do_ioctl(struct inode *inode, struct file *filp,
} }
/* /*
* em2820_v4l2_do_ioctl() * em28xx_v4l2_do_ioctl()
* This function is _not_ called directly, but from * This function is _not_ called directly, but from
* em2820_v4l2_ioctl. Userspace * em28xx_v4l2_ioctl. Userspace
* copying is done already, arg is a kernel pointer. * copying is done already, arg is a kernel pointer.
*/ */
static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, static int em28xx_video_do_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, void *arg) unsigned int cmd, void *arg)
{ {
struct em2820 *dev = filp->private_data; struct em28xx *dev = filp->private_data;
if (!dev) if (!dev)
return -ENODEV; return -ENODEV;
if (video_debug > 1) if (video_debug > 1)
em2820_print_ioctl(dev->name,cmd); em28xx_print_ioctl(dev->name,cmd);
switch (cmd) { switch (cmd) {
...@@ -1199,12 +1200,12 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1199,12 +1200,12 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
struct v4l2_capability *cap = arg; struct v4l2_capability *cap = arg;
memset(cap, 0, sizeof(*cap)); memset(cap, 0, sizeof(*cap));
strlcpy(cap->driver, "em2820", sizeof(cap->driver)); strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
strlcpy(cap->card, em2820_boards[dev->model].name, strlcpy(cap->card, em28xx_boards[dev->model].name,
sizeof(cap->card)); sizeof(cap->card));
strlcpy(cap->bus_info, dev->udev->dev.bus_id, strlcpy(cap->bus_info, dev->udev->dev.bus_id,
sizeof(cap->bus_info)); sizeof(cap->bus_info));
cap->version = EM2820_VERSION_CODE; cap->version = EM28XX_VERSION_CODE;
cap->capabilities = cap->capabilities =
V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_AUDIO | V4L2_CAP_AUDIO |
...@@ -1233,7 +1234,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1233,7 +1234,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
{ {
struct v4l2_format *format = arg; struct v4l2_format *format = arg;
em2820_videodbg("VIDIOC_G_FMT: type=%s", em28xx_videodbg("VIDIOC_G_FMT: type=%s",
format->type == format->type ==
V4L2_BUF_TYPE_VIDEO_CAPTURE ? V4L2_BUF_TYPE_VIDEO_CAPTURE ?
"V4L2_BUF_TYPE_VIDEO_CAPTURE" : format->type == "V4L2_BUF_TYPE_VIDEO_CAPTURE" : format->type ==
...@@ -1252,7 +1253,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1252,7 +1253,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
format->fmt.pix.field = dev->interlaced ? V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP; /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */ format->fmt.pix.field = dev->interlaced ? V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP; /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
em2820_videodbg("VIDIOC_G_FMT: %dx%d", dev->width, em28xx_videodbg("VIDIOC_G_FMT: %dx%d", dev->width,
dev->height); dev->height);
return 0; return 0;
} }
...@@ -1273,7 +1274,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1273,7 +1274,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
/* int both_fields; */ /* int both_fields; */
em2820_videodbg("%s: type=%s", em28xx_videodbg("%s: type=%s",
cmd == cmd ==
VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" : VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" :
"VIDIOC_S_FMT", "VIDIOC_S_FMT",
...@@ -1287,7 +1288,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1287,7 +1288,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
if (format->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) if (format->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL; return -EINVAL;
em2820_videodbg("%s: requested %dx%d", em28xx_videodbg("%s: requested %dx%d",
cmd == cmd ==
VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" : VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" :
"VIDIOC_S_FMT", format->fmt.pix.width, "VIDIOC_S_FMT", format->fmt.pix.width,
...@@ -1346,7 +1347,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1346,7 +1347,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
format->fmt.pix.field = V4L2_FIELD_INTERLACED; format->fmt.pix.field = V4L2_FIELD_INTERLACED;
em2820_videodbg("%s: returned %dx%d (%d, %d)", em28xx_videodbg("%s: returned %dx%d (%d, %d)",
cmd == cmd ==
VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" : VIDIOC_TRY_FMT ? "VIDIOC_TRY_FMT" :
"VIDIOC_S_FMT", format->fmt.pix.width, "VIDIOC_S_FMT", format->fmt.pix.width,
...@@ -1357,19 +1358,19 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1357,19 +1358,19 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
for (i = 0; i < dev->num_frames; i++) for (i = 0; i < dev->num_frames; i++)
if (dev->frame[i].vma_use_count) { if (dev->frame[i].vma_use_count) {
em2820_videodbg("VIDIOC_S_FMT failed. " em28xx_videodbg("VIDIOC_S_FMT failed. "
"Unmap the buffers first."); "Unmap the buffers first.");
return -EINVAL; return -EINVAL;
} }
/* stop io in case it is already in progress */ /* stop io in case it is already in progress */
if (dev->stream == STREAM_ON) { if (dev->stream == STREAM_ON) {
em2820_videodbg("VIDIOC_SET_FMT: interupting stream"); em28xx_videodbg("VIDIOC_SET_FMT: interupting stream");
if ((ret = em2820_stream_interrupt(dev))) if ((ret = em28xx_stream_interrupt(dev)))
return ret; return ret;
} }
em2820_release_buffers(dev); em28xx_release_buffers(dev);
dev->io = IO_NONE; dev->io = IO_NONE;
/* set new image size */ /* set new image size */
...@@ -1381,11 +1382,11 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1381,11 +1382,11 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
dev->hscale = hscale; dev->hscale = hscale;
dev->vscale = vscale; dev->vscale = vscale;
/* dev->both_fileds = both_fileds; */ /* dev->both_fileds = both_fileds; */
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
em2820_set_alternate(dev); em28xx_set_alternate(dev);
em2820_capture_start(dev, 1); em28xx_capture_start(dev, 1);
em2820_resolution_set(dev); em28xx_resolution_set(dev);
em2820_init_isoc(dev); em28xx_init_isoc(dev);
return 0; return 0;
} }
...@@ -1402,7 +1403,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1402,7 +1403,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
return -EINVAL; return -EINVAL;
if (dev->io == IO_READ) { if (dev->io == IO_READ) {
em2820_videodbg ("method is set to read;" em28xx_videodbg ("method is set to read;"
" close and open the device again to" " close and open the device again to"
" choose the mmap I/O method"); " choose the mmap I/O method");
return -EINVAL; return -EINVAL;
...@@ -1410,26 +1411,26 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1410,26 +1411,26 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
for (i = 0; i < dev->num_frames; i++) for (i = 0; i < dev->num_frames; i++)
if (dev->frame[i].vma_use_count) { if (dev->frame[i].vma_use_count) {
em2820_videodbg ("VIDIOC_REQBUFS failed; previous buffers are still mapped"); em28xx_videodbg ("VIDIOC_REQBUFS failed; previous buffers are still mapped");
return -EINVAL; return -EINVAL;
} }
if (dev->stream == STREAM_ON) { if (dev->stream == STREAM_ON) {
em2820_videodbg("VIDIOC_REQBUFS: interrupting stream"); em28xx_videodbg("VIDIOC_REQBUFS: interrupting stream");
if ((ret = em2820_stream_interrupt(dev))) if ((ret = em28xx_stream_interrupt(dev)))
return ret; return ret;
} }
em2820_empty_framequeues(dev); em28xx_empty_framequeues(dev);
em2820_release_buffers(dev); em28xx_release_buffers(dev);
if (rb->count) if (rb->count)
rb->count = rb->count =
em2820_request_buffers(dev, rb->count); em28xx_request_buffers(dev, rb->count);
dev->frame_current = NULL; dev->frame_current = NULL;
em2820_videodbg ("VIDIOC_REQBUFS: setting io method to mmap: num bufs %i", em28xx_videodbg ("VIDIOC_REQBUFS: setting io method to mmap: num bufs %i",
rb->count); rb->count);
dev->io = rb->count ? IO_MMAP : IO_NONE; dev->io = rb->count ? IO_MMAP : IO_NONE;
return 0; return 0;
...@@ -1480,7 +1481,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1480,7 +1481,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
case VIDIOC_DQBUF: case VIDIOC_DQBUF:
{ {
struct v4l2_buffer *b = arg; struct v4l2_buffer *b = arg;
struct em2820_frame_t *f; struct em28xx_frame_t *f;
unsigned long lock_flags; unsigned long lock_flags;
int ret = 0; int ret = 0;
...@@ -1505,7 +1506,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1505,7 +1506,7 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
spin_lock_irqsave(&dev->queue_lock, lock_flags); spin_lock_irqsave(&dev->queue_lock, lock_flags);
f = list_entry(dev->outqueue.next, f = list_entry(dev->outqueue.next,
struct em2820_frame_t, frame); struct em28xx_frame_t, frame);
list_del(dev->outqueue.next); list_del(dev->outqueue.next);
spin_unlock_irqrestore(&dev->queue_lock, lock_flags); spin_unlock_irqrestore(&dev->queue_lock, lock_flags);
...@@ -1518,66 +1519,66 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp, ...@@ -1518,66 +1519,66 @@ static int em2820_video_do_ioctl(struct inode *inode, struct file *filp,
return 0; return 0;
} }
default: default:
return em2820_do_ioctl(inode, filp, dev, cmd, arg, return em28xx_do_ioctl(inode, filp, dev, cmd, arg,
em2820_video_do_ioctl); em28xx_video_do_ioctl);
} }
return 0; return 0;
} }
/* /*
* em2820_v4l2_ioctl() * em28xx_v4l2_ioctl()
* handle v4l2 ioctl the main action happens in em2820_v4l2_do_ioctl() * handle v4l2 ioctl the main action happens in em28xx_v4l2_do_ioctl()
*/ */
static int em2820_v4l2_ioctl(struct inode *inode, struct file *filp, static int em28xx_v4l2_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
int ret = 0; int ret = 0;
struct em2820 *dev = filp->private_data; struct em28xx *dev = filp->private_data;
if (down_interruptible(&dev->fileop_lock)) if (down_interruptible(&dev->fileop_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
if (dev->state & DEV_DISCONNECTED) { if (dev->state & DEV_DISCONNECTED) {
em2820_errdev("v4l2 ioctl: device not present\n"); em28xx_errdev("v4l2 ioctl: device not present\n");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -ENODEV; return -ENODEV;
} }
if (dev->state & DEV_MISCONFIGURED) { if (dev->state & DEV_MISCONFIGURED) {
em2820_errdev em28xx_errdev
("v4l2 ioctl: device is misconfigured; close and open it again\n"); ("v4l2 ioctl: device is misconfigured; close and open it again\n");
up(&dev->fileop_lock); up(&dev->fileop_lock);
return -EIO; return -EIO;
} }
ret = video_usercopy(inode, filp, cmd, arg, em2820_video_do_ioctl); ret = video_usercopy(inode, filp, cmd, arg, em28xx_video_do_ioctl);
up(&dev->fileop_lock); up(&dev->fileop_lock);
return ret; return ret;
} }
static struct file_operations em2820_v4l_fops = { static struct file_operations em28xx_v4l_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = em2820_v4l2_open, .open = em28xx_v4l2_open,
.release = em2820_v4l2_close, .release = em28xx_v4l2_close,
.ioctl = em2820_v4l2_ioctl, .ioctl = em28xx_v4l2_ioctl,
.read = em2820_v4l2_read, .read = em28xx_v4l2_read,
.poll = em2820_v4l2_poll, .poll = em28xx_v4l2_poll,
.mmap = em2820_v4l2_mmap, .mmap = em28xx_v4l2_mmap,
.llseek = no_llseek, .llseek = no_llseek,
}; };
/******************************** usb interface *****************************************/ /******************************** usb interface *****************************************/
/* /*
* em2820_init_dev() * em28xx_init_dev()
* allocates and inits the device structs, registers i2c bus and v4l device * allocates and inits the device structs, registers i2c bus and v4l device
*/ */
static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
int minor, int model) int minor, int model)
{ {
struct em2820 *dev = *devhandle; struct em28xx *dev = *devhandle;
int retval = -ENOMEM; int retval = -ENOMEM;
int errCode, i; int errCode, i;
unsigned int maxh, maxw; unsigned int maxh, maxw;
...@@ -1588,33 +1589,33 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1588,33 +1589,33 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
init_MUTEX(&dev->lock); init_MUTEX(&dev->lock);
init_waitqueue_head(&dev->open); init_waitqueue_head(&dev->open);
dev->em2820_write_regs = em2820_write_regs; dev->em28xx_write_regs = em28xx_write_regs;
dev->em2820_read_reg = em2820_read_reg; dev->em28xx_read_reg = em28xx_read_reg;
dev->em2820_read_reg_req_len = em2820_read_reg_req_len; dev->em28xx_read_reg_req_len = em28xx_read_reg_req_len;
dev->em2820_write_regs_req = em2820_write_regs_req; dev->em28xx_write_regs_req = em28xx_write_regs_req;
dev->em2820_read_reg_req = em2820_read_reg_req; dev->em28xx_read_reg_req = em28xx_read_reg_req;
dev->is_em2800 = em2820_boards[model].is_em2800; dev->is_em2800 = em28xx_boards[model].is_em2800;
dev->has_tuner = em2820_boards[model].has_tuner; dev->has_tuner = em28xx_boards[model].has_tuner;
dev->has_msp34xx = em2820_boards[model].has_msp34xx; dev->has_msp34xx = em28xx_boards[model].has_msp34xx;
dev->tda9887_conf = em2820_boards[model].tda9887_conf; dev->tda9887_conf = em28xx_boards[model].tda9887_conf;
dev->decoder = em2820_boards[model].decoder; dev->decoder = em28xx_boards[model].decoder;
if (tuner >= 0) if (tuner >= 0)
dev->tuner_type = tuner; dev->tuner_type = tuner;
else else
dev->tuner_type = em2820_boards[model].tuner_type; dev->tuner_type = em28xx_boards[model].tuner_type;
dev->video_inputs = em2820_boards[model].vchannels; dev->video_inputs = em28xx_boards[model].vchannels;
for (i = 0; i < TVNORMS; i++) for (i = 0; i < TVNORMS; i++)
if (em2820_boards[model].norm == tvnorms[i].mode) if (em28xx_boards[model].norm == tvnorms[i].mode)
break; break;
if (i == TVNORMS) if (i == TVNORMS)
i = 0; i = 0;
dev->tvnorm = &tvnorms[i]; /* set default norm */ dev->tvnorm = &tvnorms[i]; /* set default norm */
em2820_videodbg("tvnorm=%s\n", dev->tvnorm->name); em28xx_videodbg("tvnorm=%s\n", dev->tvnorm->name);
maxw = norm_maxw(dev); maxw = norm_maxw(dev);
maxh = norm_maxh(dev); maxh = norm_maxh(dev);
...@@ -1622,7 +1623,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1622,7 +1623,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
/* set default image size */ /* set default image size */
dev->width = maxw; dev->width = maxw;
dev->height = maxh; dev->height = maxh;
dev->interlaced = EM2820_INTERLACED_DEFAULT; dev->interlaced = EM28XX_INTERLACED_DEFAULT;
dev->field_size = dev->width * dev->height; dev->field_size = dev->width * dev->height;
dev->frame_size = dev->frame_size =
dev->interlaced ? dev->field_size << 1 : dev->field_size; dev->interlaced ? dev->field_size << 1 : dev->field_size;
...@@ -1644,7 +1645,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1644,7 +1645,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
/* compute alternate max packet sizes */ /* compute alternate max packet sizes */
uif = dev->udev->actconfig->interface[0]; uif = dev->udev->actconfig->interface[0];
dev->alt_max_pkt_size[0] = 0; dev->alt_max_pkt_size[0] = 0;
for (i = 1; i <= EM2820_MAX_ALT && i < uif->num_altsetting ; i++) { for (i = 1; i <= EM28XX_MAX_ALT && i < uif->num_altsetting ; i++) {
u16 tmp = u16 tmp =
le16_to_cpu(uif->altsetting[i].endpoint[1].desc. le16_to_cpu(uif->altsetting[i].endpoint[1].desc.
wMaxPacketSize); wMaxPacketSize);
...@@ -1654,35 +1655,35 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1654,35 +1655,35 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
/* request some modules */ /* request some modules */
if (dev->decoder == EM2820_SAA7113 || dev->decoder == EM2820_SAA7114) if (dev->decoder == EM28XX_SAA7113 || dev->decoder == EM28XX_SAA7114)
request_module("saa711x"); request_module("saa711x");
if (dev->decoder == EM2820_TVP5150) if (dev->decoder == EM28XX_TVP5150)
request_module("tvp5150"); request_module("tvp5150");
if (dev->has_tuner) if (dev->has_tuner)
request_module("tuner"); request_module("tuner");
if (dev->tda9887_conf) if (dev->tda9887_conf)
request_module("tda9887"); request_module("tda9887");
#endif #endif
errCode = em2820_config(dev); errCode = em28xx_config(dev);
if (errCode) { if (errCode) {
em2820_errdev("error configuring device\n"); em28xx_errdev("error configuring device\n");
kfree(dev); kfree(dev);
return -ENOMEM; return -ENOMEM;
} }
down(&dev->lock); down(&dev->lock);
/* register i2c bus */ /* register i2c bus */
em2820_i2c_register(dev); em28xx_i2c_register(dev);
/* Do board specific init and eeprom reading */ /* Do board specific init and eeprom reading */
em2820_card_setup(dev); em28xx_card_setup(dev);
/* configure the device */ /* configure the device */
em2820_config_i2c(dev); em28xx_config_i2c(dev);
up(&dev->lock); up(&dev->lock);
errCode = em2820_config(dev); errCode = em28xx_config(dev);
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
if (dev->has_msp34xx) if (dev->has_msp34xx)
...@@ -1691,7 +1692,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1691,7 +1692,7 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
/* allocate and fill v4l2 device struct */ /* allocate and fill v4l2 device struct */
dev->vdev = video_device_alloc(); dev->vdev = video_device_alloc();
if (NULL == dev->vdev) { if (NULL == dev->vdev) {
em2820_errdev("cannot allocate video_device.\n"); em28xx_errdev("cannot allocate video_device.\n");
kfree(dev); kfree(dev);
return -ENOMEM; return -ENOMEM;
} }
...@@ -1700,18 +1701,18 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1700,18 +1701,18 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
if (dev->has_tuner) if (dev->has_tuner)
dev->vdev->type |= VID_TYPE_TUNER; dev->vdev->type |= VID_TYPE_TUNER;
dev->vdev->hardware = 0; dev->vdev->hardware = 0;
dev->vdev->fops = &em2820_v4l_fops; dev->vdev->fops = &em28xx_v4l_fops;
dev->vdev->minor = -1; dev->vdev->minor = -1;
dev->vdev->dev = &dev->udev->dev; dev->vdev->dev = &dev->udev->dev;
dev->vdev->release = video_device_release; dev->vdev->release = video_device_release;
snprintf(dev->vdev->name, sizeof(dev->vdev->name), "%s", snprintf(dev->vdev->name, sizeof(dev->vdev->name), "%s",
"em2820 video"); "em28xx video");
list_add_tail(&dev->devlist,&em2820_devlist); list_add_tail(&dev->devlist,&em28xx_devlist);
/* register v4l2 device */ /* register v4l2 device */
down(&dev->lock); down(&dev->lock);
if ((retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1))) { if ((retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1))) {
em2820_errdev("unable to register video device (error=%i).\n", em28xx_errdev("unable to register video device (error=%i).\n",
retval); retval);
up(&dev->lock); up(&dev->lock);
list_del(&dev->devlist); list_del(&dev->devlist);
...@@ -1721,9 +1722,9 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1721,9 +1722,9 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
} }
if (dev->has_msp34xx) { if (dev->has_msp34xx) {
/* Send a reset to other chips via gpio */ /* Send a reset to other chips via gpio */
em2820_write_regs_req(dev, 0x00, 0x08, "\xf7", 1); em28xx_write_regs_req(dev, 0x00, 0x08, "\xf7", 1);
udelay(2500); udelay(2500);
em2820_write_regs_req(dev, 0x00, 0x08, "\xff", 1); em28xx_write_regs_req(dev, 0x00, 0x08, "\xff", 1);
udelay(2500); udelay(2500);
} }
...@@ -1731,22 +1732,22 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev, ...@@ -1731,22 +1732,22 @@ static int em2820_init_dev(struct em2820 **devhandle, struct usb_device *udev,
up(&dev->lock); up(&dev->lock);
em2820_info("V4L2 device registered as /dev/video%d\n", em28xx_info("V4L2 device registered as /dev/video%d\n",
dev->vdev->minor); dev->vdev->minor);
return 0; return 0;
} }
/* /*
* em2820_usb_probe() * em28xx_usb_probe()
* checks for supported devices * checks for supported devices
*/ */
static int em2820_usb_probe(struct usb_interface *interface, static int em28xx_usb_probe(struct usb_interface *interface,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
const struct usb_endpoint_descriptor *endpoint; const struct usb_endpoint_descriptor *endpoint;
struct usb_device *udev; struct usb_device *udev;
struct em2820 *dev = NULL; struct em28xx *dev = NULL;
int retval = -ENODEV; int retval = -ENODEV;
int model,i,nr,ifnum; int model,i,nr,ifnum;
...@@ -1756,14 +1757,14 @@ static int em2820_usb_probe(struct usb_interface *interface, ...@@ -1756,14 +1757,14 @@ static int em2820_usb_probe(struct usb_interface *interface,
/* Don't register audio interfaces */ /* Don't register audio interfaces */
if (interface->altsetting[0].desc.bInterfaceClass == USB_CLASS_AUDIO) { if (interface->altsetting[0].desc.bInterfaceClass == USB_CLASS_AUDIO) {
em2820_err(DRIVER_NAME " audio device (%04x:%04x): interface %i, class %i\n", em28xx_err(DRIVER_NAME " audio device (%04x:%04x): interface %i, class %i\n",
udev->descriptor.idVendor,udev->descriptor.idProduct, udev->descriptor.idVendor,udev->descriptor.idProduct,
ifnum, ifnum,
interface->altsetting[0].desc.bInterfaceClass); interface->altsetting[0].desc.bInterfaceClass);
return -ENODEV; return -ENODEV;
} }
em2820_err(DRIVER_NAME " new video device (%04x:%04x): interface %i, class %i\n", em28xx_err(DRIVER_NAME " new video device (%04x:%04x): interface %i, class %i\n",
udev->descriptor.idVendor,udev->descriptor.idProduct, udev->descriptor.idVendor,udev->descriptor.idProduct,
ifnum, ifnum,
interface->altsetting[0].desc.bInterfaceClass); interface->altsetting[0].desc.bInterfaceClass);
...@@ -1773,33 +1774,33 @@ static int em2820_usb_probe(struct usb_interface *interface, ...@@ -1773,33 +1774,33 @@ static int em2820_usb_probe(struct usb_interface *interface,
/* check if the the device has the iso in endpoint at the correct place */ /* check if the the device has the iso in endpoint at the correct place */
if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
USB_ENDPOINT_XFER_ISOC) { USB_ENDPOINT_XFER_ISOC) {
em2820_err(DRIVER_NAME " probing error: endpoint is non-ISO endpoint!\n"); em28xx_err(DRIVER_NAME " probing error: endpoint is non-ISO endpoint!\n");
return -ENODEV; return -ENODEV;
} }
if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) { if ((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
em2820_err(DRIVER_NAME " probing error: endpoint is ISO OUT endpoint!\n"); em28xx_err(DRIVER_NAME " probing error: endpoint is ISO OUT endpoint!\n");
return -ENODEV; return -ENODEV;
} }
model=id->driver_info; model=id->driver_info;
nr=interface->minor; nr=interface->minor;
if (nr>EM2820_MAXBOARDS) { if (nr>EM28XX_MAXBOARDS) {
printk ("em2820: Supports only %i em28xx boards.\n",EM2820_MAXBOARDS); printk ("em28xx: Supports only %i em28xx boards.\n",EM28XX_MAXBOARDS);
return -ENOMEM; return -ENOMEM;
} }
/* allocate memory for our device state and initialize it */ /* allocate memory for our device state and initialize it */
dev = kmalloc(sizeof(*dev), GFP_KERNEL); dev = kmalloc(sizeof(*dev), GFP_KERNEL);
if (dev == NULL) { if (dev == NULL) {
em2820_err(DRIVER_NAME ": out of memory!\n"); em28xx_err(DRIVER_NAME ": out of memory!\n");
return -ENOMEM; return -ENOMEM;
} }
memset(dev, 0, sizeof(*dev)); memset(dev, 0, sizeof(*dev));
snprintf(dev->name, 29, "em2820 #%d", nr); snprintf(dev->name, 29, "em28xx #%d", nr);
if ((card[nr]>=0)&&(card[nr]<em2820_bcount)) if ((card[nr]>=0)&&(card[nr]<em28xx_bcount))
model=card[nr]; model=card[nr];
if ((model==EM2800_BOARD_UNKNOWN)||(model==EM2820_BOARD_UNKNOWN)) { if ((model==EM2800_BOARD_UNKNOWN)||(model==EM2820_BOARD_UNKNOWN)) {
...@@ -1811,18 +1812,18 @@ static int em2820_usb_probe(struct usb_interface *interface, ...@@ -1811,18 +1812,18 @@ static int em2820_usb_probe(struct usb_interface *interface,
dev->name,dev->name,dev->name,dev->name,dev->name); dev->name,dev->name,dev->name,dev->name,dev->name);
printk("%s: Here is a list of valid choices for the card=<n> insmod option:\n", printk("%s: Here is a list of valid choices for the card=<n> insmod option:\n",
dev->name); dev->name);
for (i = 0; i < em2820_bcount; i++) { for (i = 0; i < em28xx_bcount; i++) {
printk("%s: card=%d -> %s\n", printk("%s: card=%d -> %s\n",
dev->name, i, em2820_boards[i].name); dev->name, i, em28xx_boards[i].name);
} }
} }
/* allocate device struct */ /* allocate device struct */
retval = em2820_init_dev(&dev, udev, nr, model); retval = em28xx_init_dev(&dev, udev, nr, model);
if (retval) if (retval)
return retval; return retval;
em2820_info("Found %s\n", em2820_boards[model].name); em28xx_info("Found %s\n", em28xx_boards[model].name);
/* save our data pointer in this interface device */ /* save our data pointer in this interface device */
usb_set_intfdata(interface, dev); usb_set_intfdata(interface, dev);
...@@ -1830,38 +1831,38 @@ static int em2820_usb_probe(struct usb_interface *interface, ...@@ -1830,38 +1831,38 @@ static int em2820_usb_probe(struct usb_interface *interface,
} }
/* /*
* em2820_usb_disconnect() * em28xx_usb_disconnect()
* called when the device gets diconencted * called when the device gets diconencted
* video device will be unregistered on v4l2_close in case it is still open * video device will be unregistered on v4l2_close in case it is still open
*/ */
static void em2820_usb_disconnect(struct usb_interface *interface) static void em28xx_usb_disconnect(struct usb_interface *interface)
{ {
struct em2820 *dev = usb_get_intfdata(interface); struct em28xx *dev = usb_get_intfdata(interface);
usb_set_intfdata(interface, NULL); usb_set_intfdata(interface, NULL);
if (!dev) if (!dev)
return; return;
down_write(&em2820_disconnect); down_write(&em28xx_disconnect);
down(&dev->lock); down(&dev->lock);
em2820_info("disconnecting %s\n", dev->vdev->name); em28xx_info("disconnecting %s\n", dev->vdev->name);
wake_up_interruptible_all(&dev->open); wake_up_interruptible_all(&dev->open);
if (dev->users) { if (dev->users) {
em2820_warn em28xx_warn
("device /dev/video%d is open! Deregistration and memory " ("device /dev/video%d is open! Deregistration and memory "
"deallocation are deferred on close.\n", dev->vdev->minor); "deallocation are deferred on close.\n", dev->vdev->minor);
dev->state |= DEV_MISCONFIGURED; dev->state |= DEV_MISCONFIGURED;
em2820_uninit_isoc(dev); em28xx_uninit_isoc(dev);
dev->state |= DEV_DISCONNECTED; dev->state |= DEV_DISCONNECTED;
wake_up_interruptible(&dev->wait_frame); wake_up_interruptible(&dev->wait_frame);
wake_up_interruptible(&dev->wait_stream); wake_up_interruptible(&dev->wait_stream);
} else { } else {
dev->state |= DEV_DISCONNECTED; dev->state |= DEV_DISCONNECTED;
em2820_release_resources(dev); em28xx_release_resources(dev);
} }
up(&dev->lock); up(&dev->lock);
...@@ -1869,44 +1870,44 @@ static void em2820_usb_disconnect(struct usb_interface *interface) ...@@ -1869,44 +1870,44 @@ static void em2820_usb_disconnect(struct usb_interface *interface)
if (!dev->users) if (!dev->users)
kfree(dev); kfree(dev);
up_write(&em2820_disconnect); up_write(&em28xx_disconnect);
} }
static struct usb_driver em2820_usb_driver = { static struct usb_driver em28xx_usb_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "em2820", .name = "em28xx",
.probe = em2820_usb_probe, .probe = em28xx_usb_probe,
.disconnect = em2820_usb_disconnect, .disconnect = em28xx_usb_disconnect,
.id_table = em2820_id_table, .id_table = em28xx_id_table,
}; };
static int __init em2820_module_init(void) static int __init em28xx_module_init(void)
{ {
int result; int result;
printk(KERN_INFO DRIVER_NAME " v4l2 driver version %d.%d.%d loaded\n", printk(KERN_INFO DRIVER_NAME " v4l2 driver version %d.%d.%d loaded\n",
(EM2820_VERSION_CODE >> 16) & 0xff, (EM28XX_VERSION_CODE >> 16) & 0xff,
(EM2820_VERSION_CODE >> 8) & 0xff, EM2820_VERSION_CODE & 0xff); (EM28XX_VERSION_CODE >> 8) & 0xff, EM28XX_VERSION_CODE & 0xff);
#ifdef SNAPSHOT #ifdef SNAPSHOT
printk(KERN_INFO DRIVER_NAME " snapshot date %04d-%02d-%02d\n", printk(KERN_INFO DRIVER_NAME " snapshot date %04d-%02d-%02d\n",
SNAPSHOT / 10000, (SNAPSHOT / 100) % 100, SNAPSHOT % 100); SNAPSHOT / 10000, (SNAPSHOT / 100) % 100, SNAPSHOT % 100);
#endif #endif
/* register this driver with the USB subsystem */ /* register this driver with the USB subsystem */
result = usb_register(&em2820_usb_driver); result = usb_register(&em28xx_usb_driver);
if (result) if (result)
em2820_err(DRIVER_NAME em28xx_err(DRIVER_NAME
" usb_register failed. Error number %d.\n", result); " usb_register failed. Error number %d.\n", result);
return result; return result;
} }
static void __exit em2820_module_exit(void) static void __exit em28xx_module_exit(void)
{ {
/* deregister this driver with the USB subsystem */ /* deregister this driver with the USB subsystem */
usb_deregister(&em2820_usb_driver); usb_deregister(&em28xx_usb_driver);
} }
module_init(em2820_module_init); module_init(em28xx_module_init);
module_exit(em2820_module_exit); module_exit(em28xx_module_exit);
/* /*
em2820-cards.c - driver for Empia EM2800/EM2820/2840 USB video capture devices em28xx-cards.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com> Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>
Ludovico Cavedon <cavedon@sssup.it> Ludovico Cavedon <cavedon@sssup.it>
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef _EM2820_H #ifndef _EM28XX_H
#define _EM2820_H #define _EM28XX_H
#include <linux/videodev.h> #include <linux/videodev.h>
#include <linux/i2c.h> #include <linux/i2c.h>
...@@ -45,27 +45,27 @@ ...@@ -45,27 +45,27 @@
#define UNSET -1 #define UNSET -1
/* maximum number of em28xx boards */ /* maximum number of em28xx boards */
#define EM2820_MAXBOARDS 1 /*FIXME: should be bigger */ #define EM28XX_MAXBOARDS 1 /*FIXME: should be bigger */
/* maximum number of frames that can be queued */ /* maximum number of frames that can be queued */
#define EM2820_NUM_FRAMES 5 #define EM28XX_NUM_FRAMES 5
/* number of frames that get used for v4l2_read() */ /* number of frames that get used for v4l2_read() */
#define EM2820_NUM_READ_FRAMES 2 #define EM28XX_NUM_READ_FRAMES 2
/* number of buffers for isoc transfers */ /* number of buffers for isoc transfers */
#define EM2820_NUM_BUFS 5 #define EM28XX_NUM_BUFS 5
/* number of packets for each buffer /* number of packets for each buffer
windows requests only 40 packets .. so we better do the same windows requests only 40 packets .. so we better do the same
this is what I found out for all alternate numbers there! this is what I found out for all alternate numbers there!
*/ */
#define EM2820_NUM_PACKETS 40 #define EM28XX_NUM_PACKETS 40
/* default alternate; 0 means choose the best */ /* default alternate; 0 means choose the best */
#define EM2820_PINOUT 0 #define EM28XX_PINOUT 0
#define EM2820_MAX_ALT 7 #define EM28XX_MAX_ALT 7
#define EM2820_INTERLACED_DEFAULT 1 #define EM28XX_INTERLACED_DEFAULT 1
/* /*
#define (use usbview if you want to get the other alternate number infos) #define (use usbview if you want to get the other alternate number infos)
...@@ -89,13 +89,13 @@ ...@@ -89,13 +89,13 @@
*/ */
/* time to wait when stopping the isoc transfer */ /* time to wait when stopping the isoc transfer */
#define EM2820_URB_TIMEOUT msecs_to_jiffies(EM2820_NUM_BUFS * EM2820_NUM_PACKETS) #define EM28XX_URB_TIMEOUT msecs_to_jiffies(EM28XX_NUM_BUFS * EM28XX_NUM_PACKETS)
/* time in msecs to wait for i2c writes to finish */ /* time in msecs to wait for i2c writes to finish */
#define EM2800_I2C_WRITE_TIMEOUT 20 #define EM2800_I2C_WRITE_TIMEOUT 20
/* the various frame states */ /* the various frame states */
enum em2820_frame_state { enum em28xx_frame_state {
F_UNUSED = 0, F_UNUSED = 0,
F_QUEUED, F_QUEUED,
F_GRABBING, F_GRABBING,
...@@ -104,17 +104,17 @@ enum em2820_frame_state { ...@@ -104,17 +104,17 @@ enum em2820_frame_state {
}; };
/* stream states */ /* stream states */
enum em2820_stream_state { enum em28xx_stream_state {
STREAM_OFF, STREAM_OFF,
STREAM_INTERRUPT, STREAM_INTERRUPT,
STREAM_ON, STREAM_ON,
}; };
/* frames */ /* frames */
struct em2820_frame_t { struct em28xx_frame_t {
void *bufmem; void *bufmem;
struct v4l2_buffer buf; struct v4l2_buffer buf;
enum em2820_frame_state state; enum em28xx_frame_state state;
struct list_head frame; struct list_head frame;
unsigned long vma_use_count; unsigned long vma_use_count;
int top_field; int top_field;
...@@ -122,7 +122,7 @@ struct em2820_frame_t { ...@@ -122,7 +122,7 @@ struct em2820_frame_t {
}; };
/* io methods */ /* io methods */
enum em2820_io_method { enum em28xx_io_method {
IO_NONE, IO_NONE,
IO_READ, IO_READ,
IO_MMAP, IO_MMAP,
...@@ -130,35 +130,35 @@ enum em2820_io_method { ...@@ -130,35 +130,35 @@ enum em2820_io_method {
/* inputs */ /* inputs */
#define MAX_EM2820_INPUT 4 #define MAX_EM28XX_INPUT 4
enum enum2820_itype { enum enum28xx_itype {
EM2820_VMUX_COMPOSITE1 = 1, EM28XX_VMUX_COMPOSITE1 = 1,
EM2820_VMUX_COMPOSITE2, EM28XX_VMUX_COMPOSITE2,
EM2820_VMUX_COMPOSITE3, EM28XX_VMUX_COMPOSITE3,
EM2820_VMUX_COMPOSITE4, EM28XX_VMUX_COMPOSITE4,
EM2820_VMUX_SVIDEO, EM28XX_VMUX_SVIDEO,
EM2820_VMUX_TELEVISION, EM28XX_VMUX_TELEVISION,
EM2820_VMUX_CABLE, EM28XX_VMUX_CABLE,
EM2820_VMUX_DVB, EM28XX_VMUX_DVB,
EM2820_VMUX_DEBUG, EM28XX_VMUX_DEBUG,
EM2820_RADIO, EM28XX_RADIO,
}; };
struct em2820_input { struct em28xx_input {
enum enum2820_itype type; enum enum28xx_itype type;
unsigned int vmux; unsigned int vmux;
unsigned int amux; unsigned int amux;
}; };
#define INPUT(nr) (&em2820_boards[dev->model].input[nr]) #define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
enum em2820_decoder { enum em28xx_decoder {
EM2820_TVP5150, EM28XX_TVP5150,
EM2820_SAA7113, EM28XX_SAA7113,
EM2820_SAA7114 EM28XX_SAA7114
}; };
struct em2820_board { struct em28xx_board {
char *name; char *name;
int vchannels; int vchannels;
int norm; int norm;
...@@ -171,12 +171,12 @@ struct em2820_board { ...@@ -171,12 +171,12 @@ struct em2820_board {
unsigned int has_tuner:1; unsigned int has_tuner:1;
unsigned int has_msp34xx:1; unsigned int has_msp34xx:1;
enum em2820_decoder decoder; enum em28xx_decoder decoder;
struct em2820_input input[MAX_EM2820_INPUT]; struct em28xx_input input[MAX_EM28XX_INPUT];
}; };
struct em2820_eeprom { struct em28xx_eeprom {
u32 id; /* 0x9567eb1a */ u32 id; /* 0x9567eb1a */
u16 vendor_ID; u16 vendor_ID;
u16 product_ID; u16 product_ID;
...@@ -191,14 +191,14 @@ struct em2820_eeprom { ...@@ -191,14 +191,14 @@ struct em2820_eeprom {
}; };
/* device states */ /* device states */
enum em2820_dev_state { enum em28xx_dev_state {
DEV_INITIALIZED = 0x01, DEV_INITIALIZED = 0x01,
DEV_DISCONNECTED = 0x02, DEV_DISCONNECTED = 0x02,
DEV_MISCONFIGURED = 0x04, DEV_MISCONFIGURED = 0x04,
}; };
/* tvnorms */ /* tvnorms */
struct em2820_tvnorm { struct em28xx_tvnorm {
char *name; char *name;
v4l2_std_id id; v4l2_std_id id;
/* mode for saa7113h */ /* mode for saa7113h */
...@@ -206,7 +206,7 @@ struct em2820_tvnorm { ...@@ -206,7 +206,7 @@ struct em2820_tvnorm {
}; };
/* main device struct */ /* main device struct */
struct em2820 { struct em28xx {
/* generic device properties */ /* generic device properties */
char name[30]; /* name (including minor) of the device */ char name[30]; /* name (including minor) of the device */
int model; /* index in the device_data struct */ int model; /* index in the device_data struct */
...@@ -217,7 +217,7 @@ struct em2820 { ...@@ -217,7 +217,7 @@ struct em2820 {
unsigned int has_msp34xx:1; unsigned int has_msp34xx:1;
unsigned int has_tda9887:1; unsigned int has_tda9887:1;
enum em2820_decoder decoder; enum em28xx_decoder decoder;
int tuner_type; /* type of the tuner */ int tuner_type; /* type of the tuner */
int tuner_addr; /* tuner address */ int tuner_addr; /* tuner address */
...@@ -229,17 +229,17 @@ struct em2820 { ...@@ -229,17 +229,17 @@ struct em2820 {
int users; /* user count for exclusive use */ int users; /* user count for exclusive use */
struct video_device *vdev; /* video for linux device struct */ struct video_device *vdev; /* video for linux device struct */
struct video_picture vpic; /* picture settings only used to init saa7113h */ struct video_picture vpic; /* picture settings only used to init saa7113h */
struct em2820_tvnorm *tvnorm; /* selected tv norm */ struct em28xx_tvnorm *tvnorm; /* selected tv norm */
int ctl_freq; /* selected frequency */ int ctl_freq; /* selected frequency */
unsigned int ctl_input; /* selected input */ unsigned int ctl_input; /* selected input */
unsigned int ctl_ainput; /* slected audio input */ unsigned int ctl_ainput; /* slected audio input */
int mute; int mute;
int volume; int volume;
/* frame properties */ /* frame properties */
struct em2820_frame_t frame[EM2820_NUM_FRAMES]; /* list of frames */ struct em28xx_frame_t frame[EM28XX_NUM_FRAMES]; /* list of frames */
int num_frames; /* number of frames currently in use */ int num_frames; /* number of frames currently in use */
unsigned int frame_count; /* total number of transfered frames */ unsigned int frame_count; /* total number of transfered frames */
struct em2820_frame_t *frame_current; /* the frame that is being filled */ struct em28xx_frame_t *frame_current; /* the frame that is being filled */
int width; /* current frame width */ int width; /* current frame width */
int height; /* current frame height */ int height; /* current frame height */
int frame_size; /* current frame size */ int frame_size; /* current frame size */
...@@ -251,9 +251,9 @@ struct em2820 { ...@@ -251,9 +251,9 @@ struct em2820 {
int type; int type;
/* states */ /* states */
enum em2820_dev_state state; enum em28xx_dev_state state;
enum em2820_stream_state stream; enum em28xx_stream_state stream;
enum em2820_io_method io; enum em28xx_io_method io;
/* locks */ /* locks */
struct semaphore lock, fileop_lock; struct semaphore lock, fileop_lock;
spinlock_t queue_lock; spinlock_t queue_lock;
...@@ -267,71 +267,71 @@ struct em2820 { ...@@ -267,71 +267,71 @@ struct em2820 {
struct usb_device *udev; /* the usb device */ struct usb_device *udev; /* the usb device */
int alt; /* alternate */ int alt; /* alternate */
int max_pkt_size; /* max packet size of isoc transaction */ int max_pkt_size; /* max packet size of isoc transaction */
unsigned int alt_max_pkt_size[EM2820_MAX_ALT + 1]; /* array of wMaxPacketSize */ unsigned int alt_max_pkt_size[EM28XX_MAX_ALT + 1]; /* array of wMaxPacketSize */
struct urb *urb[EM2820_NUM_BUFS]; /* urb for isoc transfers */ struct urb *urb[EM28XX_NUM_BUFS]; /* urb for isoc transfers */
char *transfer_buffer[EM2820_NUM_BUFS]; /* transfer buffers for isoc transfer */ char *transfer_buffer[EM28XX_NUM_BUFS]; /* transfer buffers for isoc transfer */
/* helper funcs that call usb_control_msg */ /* helper funcs that call usb_control_msg */
int (*em2820_write_regs) (struct em2820 * dev, u16 reg, char *buf, int (*em28xx_write_regs) (struct em28xx * dev, u16 reg, char *buf,
int len); int len);
int (*em2820_read_reg) (struct em2820 * dev, u16 reg); int (*em28xx_read_reg) (struct em28xx * dev, u16 reg);
int (*em2820_read_reg_req_len) (struct em2820 * dev, u8 req, u16 reg, int (*em28xx_read_reg_req_len) (struct em28xx * dev, u8 req, u16 reg,
char *buf, int len); char *buf, int len);
int (*em2820_write_regs_req) (struct em2820 * dev, u8 req, u16 reg, int (*em28xx_write_regs_req) (struct em28xx * dev, u8 req, u16 reg,
char *buf, int len); char *buf, int len);
int (*em2820_read_reg_req) (struct em2820 * dev, u8 req, u16 reg); int (*em28xx_read_reg_req) (struct em28xx * dev, u8 req, u16 reg);
}; };
/* Provided by em2820-i2c.c */ /* Provided by em28xx-i2c.c */
void em2820_i2c_call_clients(struct em2820 *dev, unsigned int cmd, void *arg); void em28xx_i2c_call_clients(struct em28xx *dev, unsigned int cmd, void *arg);
int em2820_i2c_register(struct em2820 *dev); int em28xx_i2c_register(struct em28xx *dev);
int em2820_i2c_unregister(struct em2820 *dev); int em28xx_i2c_unregister(struct em28xx *dev);
/* Provided by em2820-input.c */ /* Provided by em28xx-input.c */
void em2820_set_ir(struct em2820 * dev,struct IR_i2c *ir); void em28xx_set_ir(struct em28xx * dev,struct IR_i2c *ir);
/* Provided by em2820-core.c */ /* Provided by em28xx-core.c */
void em2820_print_ioctl(char *name, unsigned int cmd); void em28xx_print_ioctl(char *name, unsigned int cmd);
u32 em2820_request_buffers(struct em2820 *dev, u32 count); u32 em28xx_request_buffers(struct em28xx *dev, u32 count);
void em2820_queue_unusedframes(struct em2820 *dev); void em28xx_queue_unusedframes(struct em28xx *dev);
void em2820_release_buffers(struct em2820 *dev); void em28xx_release_buffers(struct em28xx *dev);
int em2820_read_reg_req_len(struct em2820 *dev, u8 req, u16 reg, int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
char *buf, int len); char *buf, int len);
int em2820_read_reg_req(struct em2820 *dev, u8 req, u16 reg); int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg);
int em2820_read_reg(struct em2820 *dev, u16 reg); int em28xx_read_reg(struct em28xx *dev, u16 reg);
int em2820_write_regs_req(struct em2820 *dev, u8 req, u16 reg, char *buf, int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
int len); int len);
int em2820_write_regs(struct em2820 *dev, u16 reg, char *buf, int len); int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
int em2820_write_reg_bits(struct em2820 *dev, u16 reg, u8 val, int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
u8 bitmask); u8 bitmask);
int em2820_write_ac97(struct em2820 *dev, u8 reg, u8 * val); int em28xx_write_ac97(struct em28xx *dev, u8 reg, u8 * val);
int em2820_audio_analog_set(struct em2820 *dev); int em28xx_audio_analog_set(struct em28xx *dev);
int em2820_colorlevels_set_default(struct em2820 *dev); int em28xx_colorlevels_set_default(struct em28xx *dev);
int em2820_capture_start(struct em2820 *dev, int start); int em28xx_capture_start(struct em28xx *dev, int start);
int em2820_outfmt_set_yuv422(struct em2820 *dev); int em28xx_outfmt_set_yuv422(struct em28xx *dev);
int em2820_accumulator_set(struct em2820 *dev, u8 xmin, u8 xmax, u8 ymin, int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax, u8 ymin,
u8 ymax); u8 ymax);
int em2820_capture_area_set(struct em2820 *dev, u8 hstart, u8 vstart, int em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
u16 width, u16 height); u16 width, u16 height);
int em2820_scaler_set(struct em2820 *dev, u16 h, u16 v); int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v);
int em2820_resolution_set(struct em2820 *dev); int em28xx_resolution_set(struct em28xx *dev);
void em2820_isocIrq(struct urb *urb, struct pt_regs *regs); void em28xx_isocIrq(struct urb *urb, struct pt_regs *regs);
int em2820_init_isoc(struct em2820 *dev); int em28xx_init_isoc(struct em28xx *dev);
void em2820_uninit_isoc(struct em2820 *dev); void em28xx_uninit_isoc(struct em28xx *dev);
int em2820_set_alternate(struct em2820 *dev); int em28xx_set_alternate(struct em28xx *dev);
/* Provided by em2820-cards.c */ /* Provided by em28xx-cards.c */
extern int em2800_variant_detect(struct usb_device* udev,int model); extern int em2800_variant_detect(struct usb_device* udev,int model);
extern void em2820_card_setup(struct em2820 *dev); extern void em28xx_card_setup(struct em28xx *dev);
extern struct em2820_board em2820_boards[]; extern struct em28xx_board em28xx_boards[];
extern struct usb_device_id em2820_id_table[]; extern struct usb_device_id em28xx_id_table[];
extern const unsigned int em2820_bcount; extern const unsigned int em28xx_bcount;
/* em2820 registers */ /* em28xx registers */
#define CHIPID_REG 0x0a #define CHIPID_REG 0x0a
#define USBSUSP_REG 0x0c /* */ #define USBSUSP_REG 0x0c /* */
...@@ -386,115 +386,115 @@ extern const unsigned int em2820_bcount; ...@@ -386,115 +386,115 @@ extern const unsigned int em2820_bcount;
#define VIDEO_AC97 0x14 #define VIDEO_AC97 0x14
/* register settings */ /* register settings */
#define EM2820_AUDIO_SRC_TUNER 0xc0 #define EM28XX_AUDIO_SRC_TUNER 0xc0
#define EM2820_AUDIO_SRC_LINE 0x80 #define EM28XX_AUDIO_SRC_LINE 0x80
/* printk macros */ /* printk macros */
#define em2820_err(fmt, arg...) do {\ #define em28xx_err(fmt, arg...) do {\
printk(KERN_ERR fmt , ##arg); } while (0) printk(KERN_ERR fmt , ##arg); } while (0)
#define em2820_errdev(fmt, arg...) do {\ #define em28xx_errdev(fmt, arg...) do {\
printk(KERN_ERR "%s: "fmt,\ printk(KERN_ERR "%s: "fmt,\
dev->name , ##arg); } while (0) dev->name , ##arg); } while (0)
#define em2820_info(fmt, arg...) do {\ #define em28xx_info(fmt, arg...) do {\
printk(KERN_INFO "%s: "fmt,\ printk(KERN_INFO "%s: "fmt,\
dev->name , ##arg); } while (0) dev->name , ##arg); } while (0)
#define em2820_warn(fmt, arg...) do {\ #define em28xx_warn(fmt, arg...) do {\
printk(KERN_WARNING "%s: "fmt,\ printk(KERN_WARNING "%s: "fmt,\
dev->name , ##arg); } while (0) dev->name , ##arg); } while (0)
inline static int em2820_audio_source(struct em2820 *dev, int input) inline static int em28xx_audio_source(struct em28xx *dev, int input)
{ {
return em2820_write_reg_bits(dev, AUDIOSRC_REG, input, 0xc0); return em28xx_write_reg_bits(dev, AUDIOSRC_REG, input, 0xc0);
} }
inline static int em2820_audio_usb_mute(struct em2820 *dev, int mute) inline static int em28xx_audio_usb_mute(struct em28xx *dev, int mute)
{ {
return em2820_write_reg_bits(dev, XCLK_REG, mute ? 0x00 : 0x80, 0x80); return em28xx_write_reg_bits(dev, XCLK_REG, mute ? 0x00 : 0x80, 0x80);
} }
inline static int em2820_audio_analog_setup(struct em2820 *dev) inline static int em28xx_audio_analog_setup(struct em28xx *dev)
{ {
/* unmute video mixer with default volume level */ /* unmute video mixer with default volume level */
return em2820_write_ac97(dev, VIDEO_AC97, "\x08\x08"); return em28xx_write_ac97(dev, VIDEO_AC97, "\x08\x08");
} }
inline static int em2820_compression_disable(struct em2820 *dev) inline static int em28xx_compression_disable(struct em28xx *dev)
{ {
/* side effect of disabling scaler and mixer */ /* side effect of disabling scaler and mixer */
return em2820_write_regs(dev, COMPR_REG, "\x00", 1); return em28xx_write_regs(dev, COMPR_REG, "\x00", 1);
} }
inline static int em2820_contrast_get(struct em2820 *dev) inline static int em28xx_contrast_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, YGAIN_REG) & 0x1f; return em28xx_read_reg(dev, YGAIN_REG) & 0x1f;
} }
inline static int em2820_brightness_get(struct em2820 *dev) inline static int em28xx_brightness_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, YOFFSET_REG); return em28xx_read_reg(dev, YOFFSET_REG);
} }
inline static int em2820_saturation_get(struct em2820 *dev) inline static int em28xx_saturation_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, UVGAIN_REG) & 0x1f; return em28xx_read_reg(dev, UVGAIN_REG) & 0x1f;
} }
inline static int em2820_u_balance_get(struct em2820 *dev) inline static int em28xx_u_balance_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, UOFFSET_REG); return em28xx_read_reg(dev, UOFFSET_REG);
} }
inline static int em2820_v_balance_get(struct em2820 *dev) inline static int em28xx_v_balance_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, VOFFSET_REG); return em28xx_read_reg(dev, VOFFSET_REG);
} }
inline static int em2820_gamma_get(struct em2820 *dev) inline static int em28xx_gamma_get(struct em28xx *dev)
{ {
return em2820_read_reg(dev, GAMMA_REG) & 0x3f; return em28xx_read_reg(dev, GAMMA_REG) & 0x3f;
} }
inline static int em2820_contrast_set(struct em2820 *dev, s32 val) inline static int em28xx_contrast_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, YGAIN_REG, &tmp, 1); return em28xx_write_regs(dev, YGAIN_REG, &tmp, 1);
} }
inline static int em2820_brightness_set(struct em2820 *dev, s32 val) inline static int em28xx_brightness_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, YOFFSET_REG, &tmp, 1); return em28xx_write_regs(dev, YOFFSET_REG, &tmp, 1);
} }
inline static int em2820_saturation_set(struct em2820 *dev, s32 val) inline static int em28xx_saturation_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, UVGAIN_REG, &tmp, 1); return em28xx_write_regs(dev, UVGAIN_REG, &tmp, 1);
} }
inline static int em2820_u_balance_set(struct em2820 *dev, s32 val) inline static int em28xx_u_balance_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, UOFFSET_REG, &tmp, 1); return em28xx_write_regs(dev, UOFFSET_REG, &tmp, 1);
} }
inline static int em2820_v_balance_set(struct em2820 *dev, s32 val) inline static int em28xx_v_balance_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, VOFFSET_REG, &tmp, 1); return em28xx_write_regs(dev, VOFFSET_REG, &tmp, 1);
} }
inline static int em2820_gamma_set(struct em2820 *dev, s32 val) inline static int em28xx_gamma_set(struct em28xx *dev, s32 val)
{ {
u8 tmp = (u8) val; u8 tmp = (u8) val;
return em2820_write_regs(dev, GAMMA_REG, &tmp, 1); return em28xx_write_regs(dev, GAMMA_REG, &tmp, 1);
} }
/*FIXME: maxw should be dependent of alt mode */ /*FIXME: maxw should be dependent of alt mode */
inline static unsigned int norm_maxw(struct em2820 *dev) inline static unsigned int norm_maxw(struct em28xx *dev)
{ {
switch(dev->model){ switch(dev->model){
case (EM2820_BOARD_MSI_VOX_USB_2): return(640); case (EM2820_BOARD_MSI_VOX_USB_2): return(640);
...@@ -502,7 +502,7 @@ inline static unsigned int norm_maxw(struct em2820 *dev) ...@@ -502,7 +502,7 @@ inline static unsigned int norm_maxw(struct em2820 *dev)
} }
} }
inline static unsigned int norm_maxh(struct em2820 *dev) inline static unsigned int norm_maxh(struct em28xx *dev)
{ {
switch(dev->model){ switch(dev->model){
case (EM2820_BOARD_MSI_VOX_USB_2): return(480); case (EM2820_BOARD_MSI_VOX_USB_2): return(480);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment