* [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI
@ 2005-12-04 2:14 ITO N. Hisashi
2005-12-04 3:14 ` [PATCH 2.6.14.3] hid-core: add HID quirks for Morphy USB-IO ITO N. Hisashi
2005-12-04 11:44 ` [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI Mauro Carvalho Chehab
0 siblings, 2 replies; 3+ messages in thread
From: ITO N. Hisashi @ 2005-12-04 2:14 UTC (permalink / raw)
To: linux-kernel; +Cc: kraxel
Add support for IO-DATA GV-BCTV/PCI and IO-DATA GV-BCTV2/PCI.
Signed-off-by: Hisashi Ito <kuro@neko.ac>
diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/media/video/bttv-cards.c linux-2.6.14.3/drivers/media/video/bttv-cards.c
--- linux-2.6.14.3-vanilla/drivers/media/video/bttv-cards.c 2005-11-25 07:10:21.000000000 +0900
+++ linux-2.6.14.3/drivers/media/video/bttv-cards.c 2005-12-04 09:56:50.000000000 +0900
@@ -54,10 +54,11 @@ static void lt9415_audio(struct bttv *bt
static void avermedia_tvphone_audio(struct bttv *btv, struct video_audio *v,
int set);
static void avermedia_tv_stereo_audio(struct bttv *btv, struct video_audio *v,
int set);
static void terratv_audio(struct bttv *btv, struct video_audio *v, int set);
+static void gvbctv2pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void gvbctv5pci_audio(struct bttv *btv, struct video_audio *v, int set);
static void winfast2000_audio(struct bttv *btv, struct video_audio *v, int set);
static void pvbt878p9b_audio(struct bttv *btv, struct video_audio *v, int set);
static void fv2000s_audio(struct bttv *btv, struct video_audio *v, int set);
@@ -81,10 +82,15 @@ static void kodicom4400r_muxsel(struct b
static void kodicom4400r_init(struct bttv *btv);
static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);
+static void gvbctv2pci_write(struct bttv *btv, int data);
+static int gvbctv2pci_read(struct bttv *btv);
+static void gvbctv2pci_muxsel(struct bttv *btv, unsigned int input);
+static void gvbctv2pci_init(struct bttv *btv);
+
static int terratec_active_radio_upgrade(struct bttv *btv);
static int tea5757_read(struct bttv *btv);
static int tea5757_write(struct bttv *btv, int value);
static void identify_by_eeprom(struct bttv *btv,
unsigned char eeprom_data[256]);
@@ -2416,10 +2422,27 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1,
.pll = PLL_28,
.tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
.tuner_addr = 0xc1 >>1,
.has_radio = 1,
+},{
+ /* Hisashi Ito <kuro@neko.ac>
+ (Originally by Hiroshi Ohno <hiroshi@bigfield.com>) */
+ .name = "IODATA GV-BCTV2/PCI",
+ .video_inputs = 3,
+ .audio_inputs = 1,
+ .tuner = 0,
+ .svhs = 2,
+ .muxsel = {2, 3, 1},
+ .no_msp34xx = 1,
+ .no_tda9875 = 1,
+ .no_tda7432 = 1,
+ .pll = PLL_28,
+ .tuner_type = TUNER_ALPS_TSBH1_NTSC,
+ .tuner_addr = ADDR_UNSET,
+ .muxsel_hook = gvbctv2pci_muxsel,
+ .audio_hook = gvbctv2pci_audio,
}};
static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
/* ----------------------------------------------------------------------- */
@@ -2749,10 +2772,52 @@ static void sigmaSLC_muxsel(struct bttv
unsigned int inmux = input % 4;
gpio_inout( 3<<9, 3<<9 );
gpio_bits( 3<<9, inmux<<9 );
}
+static void
+gvbctv2pci_write(struct bttv *btv, int data)
+{
+ btwrite(0, BT848_GPIO_OUT_EN);
+ btwrite(data, BT848_GPIO_DATA);
+ btwrite(0xff00, BT848_GPIO_OUT_EN);
+ data &= ~0x400;
+ btwrite(data, BT848_GPIO_DATA);
+ data |= 0x400;
+ btwrite(data, BT848_GPIO_DATA);
+ btwrite(0xff00, BT848_GPIO_DATA);
+ btwrite(0, BT848_GPIO_OUT_EN);
+}
+
+static int
+gvbctv2pci_read(struct bttv *btv)
+{
+ int data;
+
+ btwrite(0, BT848_GPIO_OUT_EN);
+ btwrite(0x0d00, BT848_GPIO_DATA);
+ btwrite(0x0f00, BT848_GPIO_OUT_EN);
+ btwrite(0x0500, BT848_GPIO_DATA);
+ data = btread(BT848_GPIO_DATA);
+ btwrite(0x0d00, BT848_GPIO_DATA);
+ btwrite(0x0f00, BT848_GPIO_DATA);
+ btwrite(0, BT848_GPIO_OUT_EN);
+ return data;
+}
+
+static void
+gvbctv2pci_muxsel(struct bttv *btv, unsigned int input)
+{
+ static const int masks[] = {0x1f00, 0x0f00, 0x0f00};
+ gvbctv2pci_write(btv, masks[input]);
+}
+
+static void
+gvbctv2pci_init(struct bttv *btv)
+{
+ gvbctv2pci_write(btv, 0x4d00); /* mute */
+}
/* ----------------------------------------------------------------------- */
static void bttv_reset_audio(struct bttv *btv)
{
/*
@@ -2911,10 +2976,13 @@ void __devinit bttv_init_card2(struct bt
tibetCS16_init(btv);
break;
case BTTV_KODICOM_4400R:
kodicom4400r_init(btv);
break;
+ case BTTV_GVBCTV2PCI:
+ gvbctv2pci_init(btv);
+ break;
}
/* pll configuration */
if (!(btv->id==848 && btv->revision==0x11)) {
/* defaults from card list */
@@ -3740,10 +3808,49 @@ void winview_audio(struct bttv *btv, str
/* ----------------------------------------------------------------------- */
/* mono/stereo control for various cards (which don't use i2c chips but */
/* connect something to the GPIO pins */
static void
+gvbctv2pci_audio(struct bttv *btv, struct video_audio *v, int set)
+{
+ if (set) {
+ int con = 0x0d00;
+
+ if (v->mode & VIDEO_SOUND_LANG2) {
+ con = 0x3d00; /* LANG2 */
+ if (v->mode & VIDEO_SOUND_LANG1)
+ con = 0x1d00; /* LANG1+LANG2 */
+ }
+ /* Set BCTV2 mute here since we can't do via direct gpio. */
+ if (v->flags & VIDEO_AUDIO_MUTE)
+ con = 0x4d00;
+ gvbctv2pci_write(btv, con);
+ } else {
+ switch (gvbctv2pci_read(btv) & 0x7000) {
+ case 0x3000:
+ v->mode = VIDEO_SOUND_STEREO;
+ break;
+ case 0x4000:
+ v->mode = VIDEO_SOUND_LANG1|VIDEO_SOUND_LANG2;
+ break;
+ case 0x5000:
+ v->mode = VIDEO_SOUND_LANG2;
+ break;
+ case 0x6000:
+ v->mode = VIDEO_SOUND_LANG1;
+ break;
+ case 0x7000:
+ v->mode = VIDEO_SOUND_MONO;
+ break;
+ default:
+ v->mode = VIDEO_SOUND_MONO | VIDEO_SOUND_STEREO |
+ VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2;
+ }
+ }
+}
+
+static void
gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set)
{
unsigned int con = 0;
if (set) {
diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/media/video/bttv.h linux-2.6.14.3/drivers/media/video/bttv.h
--- linux-2.6.14.3-vanilla/drivers/media/video/bttv.h 2005-11-25 07:10:21.000000000 +0900
+++ linux-2.6.14.3/drivers/media/video/bttv.h 2005-12-04 09:08:20.000000000 +0900
@@ -135,10 +135,11 @@
#define BTTV_TIBET_CS16 0x83
#define BTTV_KODICOM_4400R 0x84
#define BTTV_ADLINK_RTV24 0x86
#define BTTV_DVICO_FUSIONHDTV_5_LITE 0x87
#define BTTV_ACORP_Y878F 0x88
+#define BTTV_GVBCTV2PCI 0x89
/* i2c address list */
#define I2C_TSA5522 0xc2
#define I2C_TDA7432 0x8a
#define I2C_BT832_ALT1 0x88
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2.6.14.3] hid-core: add HID quirks for Morphy USB-IO
2005-12-04 2:14 [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI ITO N. Hisashi
@ 2005-12-04 3:14 ` ITO N. Hisashi
2005-12-04 11:44 ` [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI Mauro Carvalho Chehab
1 sibling, 0 replies; 3+ messages in thread
From: ITO N. Hisashi @ 2005-12-04 3:14 UTC (permalink / raw)
To: linux-kernel; +Cc: mike-
Morphy USB-IO (and its clones made by Km2Net or Techno Kit) reports
the type to be an HID, but this is wrong because it is a general
purpose I/O device.
Signed-off-by: Hisashi Ito <kuro@neko.ac>
diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/usb/input/hid-core.c linux-2.6.14.3/drivers/usb/input/hid-core.c
--- linux-2.6.14.3-vanilla/drivers/usb/input/hid-core.c 2005-11-25 07:10:21.000000000 +0900
+++ linux-2.6.14.3/drivers/usb/input/hid-core.c 2005-12-04 11:43:38.000000000 +0900
@@ -1445,10 +1445,19 @@ void hid_init_reports(struct hid_device
#define USB_DEVICE_ID_POWERCONTROL 0x2030
#define USB_VENDOR_ID_APPLE 0x05ac
#define USB_DEVICE_ID_APPLE_POWERMOUSE 0x0304
+#define USB_VENDOR_ID_KM2NET 0x1352
+#define USB_DEVICE_ID_KM2NET_USBIO 0x0100
+
+#define USB_VENDOR_ID_MORPHY 0x0BFE
+#define USB_DEVICE_ID_MORPHY_USBIO 0x1000
+
+#define USB_VENDOR_ID_TECHNOKIT 0x12ED
+#define USB_DEVICE_ID_TECHNOKIT_USBIO 0x1003
+
/*
* Alphabetically sorted blacklist by quirk type.
*/
static struct hid_blacklist {
@@ -1480,10 +1489,11 @@ static struct hid_blacklist {
{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_KM2NET, USB_DEVICE_ID_KM2NET_USBIO, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_CASSY, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_POCKETCASSY, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_MOBILECASSY, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_JWM, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_DMMP, HID_QUIRK_IGNORE },
@@ -1495,16 +1505,21 @@ static struct hid_blacklist {
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_POWERCONTROL, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_MORPHY, USB_DEVICE_ID_MORPHY_USBIO, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_MORPHY, USB_DEVICE_ID_MORPHY_USBIO + 1, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_MORPHY, USB_DEVICE_ID_MORPHY_USBIO + 2, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_MORPHY, USB_DEVICE_ID_MORPHY_USBIO + 3, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE },
+ { USB_VENDOR_ID_TECHNOKIT, USB_DEVICE_ID_TECHNOKIT_USBIO, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PENPARTNER, HID_QUIRK_IGNORE },
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI
2005-12-04 2:14 [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI ITO N. Hisashi
2005-12-04 3:14 ` [PATCH 2.6.14.3] hid-core: add HID quirks for Morphy USB-IO ITO N. Hisashi
@ 2005-12-04 11:44 ` Mauro Carvalho Chehab
1 sibling, 0 replies; 3+ messages in thread
From: Mauro Carvalho Chehab @ 2005-12-04 11:44 UTC (permalink / raw)
To: his; +Cc: linux-kernel, kraxel, Linux and Kernel Video
Hisashi,
First of all, kraxel is not the current maintainer. Please c/c to me
instead. Also, please copy v4l mailing list. You don't need to c/c LKML
for this kind of patch.
Em Dom, 2005-12-04 às 11:14 +0900, ITO N. Hisashi escreveu:
> Add support for IO-DATA GV-BCTV/PCI and IO-DATA GV-BCTV2/PCI.
>
> Signed-off-by: Hisashi Ito <kuro@neko.ac>
>
> diff -U 5 -rpN linux-2.6.14.3-vanilla/drivers/media/video/bttv-cards.c linux-2.6.14.3/drivers/media/video/bttv-cards.c
No. Newer patches should be generated against V4L tree. It is available
at http://linuxtv.org
>
> +static void
> +gvbctv2pci_write(struct bttv *btv, int data)
> +{
> + btwrite(0, BT848_GPIO_OUT_EN);
> + btwrite(data, BT848_GPIO_DATA);
> + btwrite(0xff00, BT848_GPIO_OUT_EN);
> + data &= ~0x400;
> + btwrite(data, BT848_GPIO_DATA);
> + data |= 0x400;
> + btwrite(data, BT848_GPIO_DATA);
> + btwrite(0xff00, BT848_GPIO_DATA);
> + btwrite(0, BT848_GPIO_OUT_EN);
> +}
> +
> +static int
> +gvbctv2pci_read(struct bttv *btv)
> +{
> + int data;
> +
> + btwrite(0, BT848_GPIO_OUT_EN);
> + btwrite(0x0d00, BT848_GPIO_DATA);
> + btwrite(0x0f00, BT848_GPIO_OUT_EN);
> + btwrite(0x0500, BT848_GPIO_DATA);
> + data = btread(BT848_GPIO_DATA);
> + btwrite(0x0d00, BT848_GPIO_DATA);
> + btwrite(0x0f00, BT848_GPIO_DATA);
> + btwrite(0, BT848_GPIO_OUT_EN);
> + return data;
> +}
> +
> +static void
> +gvbctv2pci_muxsel(struct bttv *btv, unsigned int input)
> +{
> + static const int masks[] = {0x1f00, 0x0f00, 0x0f00};
> + gvbctv2pci_write(btv, masks[input]);
> +}
> +
> +static void
> +gvbctv2pci_init(struct bttv *btv)
> +{
> + gvbctv2pci_write(btv, 0x4d00); /* mute */
> +}
> +gvbctv2pci_audio(struct bttv *btv, struct video_audio *v, int set)
> +{
> + if (set) {
> + int con = 0x0d00;
> +
> + if (v->mode & VIDEO_SOUND_LANG2) {
> + con = 0x3d00; /* LANG2 */
> + if (v->mode & VIDEO_SOUND_LANG1)
> + con = 0x1d00; /* LANG1+LANG2 */
> + }
> + /* Set BCTV2 mute here since we can't do via direct gpio. */
> + if (v->flags & VIDEO_AUDIO_MUTE)
> + con = 0x4d00;
> + gvbctv2pci_write(btv, con);
> + } else {
> + switch (gvbctv2pci_read(btv) & 0x7000) {
> + case 0x3000:
> + v->mode = VIDEO_SOUND_STEREO;
> + break;
> + case 0x4000:
> + v->mode = VIDEO_SOUND_LANG1|VIDEO_SOUND_LANG2;
> + break;
> + case 0x5000:
> + v->mode = VIDEO_SOUND_LANG2;
> + break;
> + case 0x6000:
> + v->mode = VIDEO_SOUND_LANG1;
> + break;
> + case 0x7000:
> + v->mode = VIDEO_SOUND_MONO;
> + break;
> + default:
> + v->mode = VIDEO_SOUND_MONO | VIDEO_SOUND_STEREO |
> + VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2;
> + }
> + }
> +}
> +
> +static void
Am I wrong, or do you have a different audio chip? If so, the best
practice is to create a separate file for handling it (like we have for
msp34xx, wm8775 and others).
> +#define BTTV_GVBCTV2PCI 0x89
No. Today's last board is 0x8f. This is because you've used 2.6.14 instead of the v4l tree.
Cheers,
Mauro.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-12-04 11:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-04 2:14 [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI ITO N. Hisashi
2005-12-04 3:14 ` [PATCH 2.6.14.3] hid-core: add HID quirks for Morphy USB-IO ITO N. Hisashi
2005-12-04 11:44 ` [PATCH 2.6.14.3] bttv-cards: add IO-DATA GV-BCTV2/PCI Mauro Carvalho Chehab
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.