License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.
By default all files without license information are under the default
license of the kernel, which is GPL version 2.
Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier. The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.
This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.
How this work was done:
Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
- file had no licensing information it it.
- file was a */uapi/* one with no licensing information in it,
- file was a */uapi/* one with existing licensing information,
Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.
The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne. Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.
The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed. Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.
Criteria used to select files for SPDX license identifier tagging was:
- Files considered eligible had to be source code files.
- Make and config files were included as candidates if they contained >5
lines of source
- File already had some variant of a license header in it (even if <5
lines).
All documentation files were explicitly excluded.
The following heuristics were used to determine which SPDX license
identifiers to apply.
- when both scanners couldn't find any license traces, file was
considered to have no license information in it, and the top level
COPYING file license applied.
For non */uapi/* files that summary was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 11139
and resulted in the first patch in this series.
If that file was a */uapi/* path one, it was "GPL-2.0 WITH
Linux-syscall-note" otherwise it was "GPL-2.0". Results of that was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 WITH Linux-syscall-note 930
and resulted in the second patch in this series.
- if a file had some form of licensing information in it, and was one
of the */uapi/* ones, it was denoted with the Linux-syscall-note if
any GPL family license was found in the file or had no licensing in
it (per prior point). Results summary:
SPDX license identifier # files
---------------------------------------------------|------
GPL-2.0 WITH Linux-syscall-note 270
GPL-2.0+ WITH Linux-syscall-note 169
((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
LGPL-2.1+ WITH Linux-syscall-note 15
GPL-1.0+ WITH Linux-syscall-note 14
((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
LGPL-2.0+ WITH Linux-syscall-note 4
LGPL-2.1 WITH Linux-syscall-note 3
((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1
and that resulted in the third patch in this series.
- when the two scanners agreed on the detected license(s), that became
the concluded license(s).
- when there was disagreement between the two scanners (one detected a
license but the other didn't, or they both detected different
licenses) a manual inspection of the file occurred.
- In most cases a manual inspection of the information in the file
resulted in a clear resolution of the license that should apply (and
which scanner probably needed to revisit its heuristics).
- When it was not immediately clear, the license identifier was
confirmed with lawyers working with the Linux Foundation.
- If there was any question as to the appropriate license identifier,
the file was flagged for further research and to be revisited later
in time.
In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.
Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights. The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.
Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.
In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.
Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
- a full scancode scan run, collecting the matched texts, detected
license ids and scores
- reviewing anything where there was a license detected (about 500+
files) to ensure that the applied SPDX license was correct
- reviewing anything where there was no detection but the patch license
was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
SPDX license was correct
This produced a worksheet with 20 files needing minor correction. This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.
These .csv files were then reviewed by Greg. Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected. This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.) Finally Greg ran the script using the .csv files to
generate the patches.
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-01 21:07:57 +07:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
2005-04-17 05:20:36 +07:00
|
|
|
/*
|
|
|
|
*
|
|
|
|
* bttv - Bt848 frame grabber driver
|
|
|
|
*
|
|
|
|
* card ID's and external interfaces of the bttv driver
|
|
|
|
* basically stuff needed by other drivers (i2c, lirc, ...)
|
|
|
|
* and is supported not to change much over time.
|
|
|
|
*
|
|
|
|
* Copyright (C) 1996,97 Ralph Metzler (rjkm@thp.uni-koeln.de)
|
|
|
|
* (c) 1999,2000 Gerd Knorr <kraxel@goldbach.in-berlin.de>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _BTTV_H_
|
|
|
|
#define _BTTV_H_
|
|
|
|
|
2009-03-10 15:31:34 +07:00
|
|
|
#include <linux/videodev2.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
#include <linux/i2c.h>
|
2009-03-14 22:36:54 +07:00
|
|
|
#include <media/v4l2-device.h>
|
2008-04-23 00:46:13 +07:00
|
|
|
#include <media/tuner.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
/* exported by bttv-cards.c */
|
|
|
|
|
2005-11-09 12:37:03 +07:00
|
|
|
#define BTTV_BOARD_UNKNOWN 0x00
|
|
|
|
#define BTTV_BOARD_MIRO 0x01
|
|
|
|
#define BTTV_BOARD_HAUPPAUGE 0x02
|
|
|
|
#define BTTV_BOARD_STB 0x03
|
|
|
|
#define BTTV_BOARD_INTEL 0x04
|
|
|
|
#define BTTV_BOARD_DIAMOND 0x05
|
|
|
|
#define BTTV_BOARD_AVERMEDIA 0x06
|
|
|
|
#define BTTV_BOARD_MATRIX_VISION 0x07
|
|
|
|
#define BTTV_BOARD_FLYVIDEO 0x08
|
|
|
|
#define BTTV_BOARD_TURBOTV 0x09
|
|
|
|
#define BTTV_BOARD_HAUPPAUGE878 0x0a
|
|
|
|
#define BTTV_BOARD_MIROPRO 0x0b
|
|
|
|
#define BTTV_BOARD_ADSTECH_TV 0x0c
|
|
|
|
#define BTTV_BOARD_AVERMEDIA98 0x0d
|
|
|
|
#define BTTV_BOARD_VHX 0x0e
|
|
|
|
#define BTTV_BOARD_ZOLTRIX 0x0f
|
|
|
|
#define BTTV_BOARD_PIXVIEWPLAYTV 0x10
|
|
|
|
#define BTTV_BOARD_WINVIEW_601 0x11
|
|
|
|
#define BTTV_BOARD_AVEC_INTERCAP 0x12
|
|
|
|
#define BTTV_BOARD_LIFE_FLYKIT 0x13
|
|
|
|
#define BTTV_BOARD_CEI_RAFFLES 0x14
|
|
|
|
#define BTTV_BOARD_CONFERENCETV 0x15
|
|
|
|
#define BTTV_BOARD_PHOEBE_TVMAS 0x16
|
|
|
|
#define BTTV_BOARD_MODTEC_205 0x17
|
|
|
|
#define BTTV_BOARD_MAGICTVIEW061 0x18
|
|
|
|
#define BTTV_BOARD_VOBIS_BOOSTAR 0x19
|
|
|
|
#define BTTV_BOARD_HAUPPAUG_WCAM 0x1a
|
|
|
|
#define BTTV_BOARD_MAXI 0x1b
|
|
|
|
#define BTTV_BOARD_TERRATV 0x1c
|
|
|
|
#define BTTV_BOARD_PXC200 0x1d
|
|
|
|
#define BTTV_BOARD_FLYVIDEO_98 0x1e
|
|
|
|
#define BTTV_BOARD_IPROTV 0x1f
|
|
|
|
#define BTTV_BOARD_INTEL_C_S_PCI 0x20
|
|
|
|
#define BTTV_BOARD_TERRATVALUE 0x21
|
|
|
|
#define BTTV_BOARD_WINFAST2000 0x22
|
|
|
|
#define BTTV_BOARD_CHRONOS_VS2 0x23
|
|
|
|
#define BTTV_BOARD_TYPHOON_TVIEW 0x24
|
|
|
|
#define BTTV_BOARD_PXELVWPLTVPRO 0x25
|
|
|
|
#define BTTV_BOARD_MAGICTVIEW063 0x26
|
|
|
|
#define BTTV_BOARD_PINNACLE 0x27
|
|
|
|
#define BTTV_BOARD_STB2 0x28
|
|
|
|
#define BTTV_BOARD_AVPHONE98 0x29
|
|
|
|
#define BTTV_BOARD_PV951 0x2a
|
|
|
|
#define BTTV_BOARD_ONAIR_TV 0x2b
|
|
|
|
#define BTTV_BOARD_SIGMA_TVII_FM 0x2c
|
|
|
|
#define BTTV_BOARD_MATRIX_VISION2 0x2d
|
|
|
|
#define BTTV_BOARD_ZOLTRIX_GENIE 0x2e
|
|
|
|
#define BTTV_BOARD_TERRATVRADIO 0x2f
|
|
|
|
#define BTTV_BOARD_DYNALINK 0x30
|
|
|
|
#define BTTV_BOARD_GVBCTV3PCI 0x31
|
|
|
|
#define BTTV_BOARD_PXELVWPLTVPAK 0x32
|
|
|
|
#define BTTV_BOARD_EAGLE 0x33
|
|
|
|
#define BTTV_BOARD_PINNACLEPRO 0x34
|
|
|
|
#define BTTV_BOARD_TVIEW_RDS_FM 0x35
|
|
|
|
#define BTTV_BOARD_LIFETEC_9415 0x36
|
|
|
|
#define BTTV_BOARD_BESTBUY_EASYTV 0x37
|
|
|
|
#define BTTV_BOARD_FLYVIDEO_98FM 0x38
|
|
|
|
#define BTTV_BOARD_GRANDTEC 0x39
|
|
|
|
#define BTTV_BOARD_ASKEY_CPH060 0x3a
|
|
|
|
#define BTTV_BOARD_ASKEY_CPH03X 0x3b
|
|
|
|
#define BTTV_BOARD_MM100PCTV 0x3c
|
|
|
|
#define BTTV_BOARD_GMV1 0x3d
|
|
|
|
#define BTTV_BOARD_BESTBUY_EASYTV2 0x3e
|
|
|
|
#define BTTV_BOARD_ATI_TVWONDER 0x3f
|
|
|
|
#define BTTV_BOARD_ATI_TVWONDERVE 0x40
|
|
|
|
#define BTTV_BOARD_FLYVIDEO2000 0x41
|
|
|
|
#define BTTV_BOARD_TERRATVALUER 0x42
|
|
|
|
#define BTTV_BOARD_GVBCTV4PCI 0x43
|
|
|
|
#define BTTV_BOARD_VOODOOTV_FM 0x44
|
|
|
|
#define BTTV_BOARD_AIMMS 0x45
|
|
|
|
#define BTTV_BOARD_PV_BT878P_PLUS 0x46
|
|
|
|
#define BTTV_BOARD_FLYVIDEO98EZ 0x47
|
|
|
|
#define BTTV_BOARD_PV_BT878P_9B 0x48
|
2011-10-26 05:43:55 +07:00
|
|
|
#define BTTV_BOARD_SENSORAY311_611 0x49
|
2005-11-09 12:37:03 +07:00
|
|
|
#define BTTV_BOARD_RV605 0x4a
|
|
|
|
#define BTTV_BOARD_POWERCLR_MTV878 0x4b
|
|
|
|
#define BTTV_BOARD_WINDVR 0x4c
|
|
|
|
#define BTTV_BOARD_GRANDTEC_MULTI 0x4d
|
|
|
|
#define BTTV_BOARD_KWORLD 0x4e
|
|
|
|
#define BTTV_BOARD_DSP_TCVIDEO 0x4f
|
|
|
|
#define BTTV_BOARD_HAUPPAUGEPVR 0x50
|
|
|
|
#define BTTV_BOARD_GVBCTV5PCI 0x51
|
|
|
|
#define BTTV_BOARD_OSPREY1x0 0x52
|
|
|
|
#define BTTV_BOARD_OSPREY1x0_848 0x53
|
|
|
|
#define BTTV_BOARD_OSPREY101_848 0x54
|
|
|
|
#define BTTV_BOARD_OSPREY1x1 0x55
|
|
|
|
#define BTTV_BOARD_OSPREY1x1_SVID 0x56
|
|
|
|
#define BTTV_BOARD_OSPREY2xx 0x57
|
|
|
|
#define BTTV_BOARD_OSPREY2x0_SVID 0x58
|
|
|
|
#define BTTV_BOARD_OSPREY2x0 0x59
|
|
|
|
#define BTTV_BOARD_OSPREY500 0x5a
|
|
|
|
#define BTTV_BOARD_OSPREY540 0x5b
|
|
|
|
#define BTTV_BOARD_OSPREY2000 0x5c
|
|
|
|
#define BTTV_BOARD_IDS_EAGLE 0x5d
|
|
|
|
#define BTTV_BOARD_PINNACLESAT 0x5e
|
|
|
|
#define BTTV_BOARD_FORMAC_PROTV 0x5f
|
|
|
|
#define BTTV_BOARD_MACHTV 0x60
|
|
|
|
#define BTTV_BOARD_EURESYS_PICOLO 0x61
|
|
|
|
#define BTTV_BOARD_PV150 0x62
|
|
|
|
#define BTTV_BOARD_AD_TVK503 0x63
|
|
|
|
#define BTTV_BOARD_HERCULES_SM_TV 0x64
|
|
|
|
#define BTTV_BOARD_PACETV 0x65
|
|
|
|
#define BTTV_BOARD_IVC200 0x66
|
|
|
|
#define BTTV_BOARD_XGUARD 0x67
|
|
|
|
#define BTTV_BOARD_NEBULA_DIGITV 0x68
|
|
|
|
#define BTTV_BOARD_PV143 0x69
|
2008-11-22 05:00:55 +07:00
|
|
|
#define BTTV_BOARD_VD009X1_VD011_MINIDIN 0x6a
|
|
|
|
#define BTTV_BOARD_VD009X1_VD011_COMBI 0x6b
|
2005-11-09 12:37:03 +07:00
|
|
|
#define BTTV_BOARD_VD009_MINIDIN 0x6c
|
|
|
|
#define BTTV_BOARD_VD009_COMBI 0x6d
|
|
|
|
#define BTTV_BOARD_IVC100 0x6e
|
|
|
|
#define BTTV_BOARD_IVC120 0x6f
|
|
|
|
#define BTTV_BOARD_PC_HDTV 0x70
|
|
|
|
#define BTTV_BOARD_TWINHAN_DST 0x71
|
|
|
|
#define BTTV_BOARD_WINFASTVC100 0x72
|
|
|
|
#define BTTV_BOARD_TEV560 0x73
|
|
|
|
#define BTTV_BOARD_SIMUS_GVC1100 0x74
|
|
|
|
#define BTTV_BOARD_NGSTV_PLUS 0x75
|
|
|
|
#define BTTV_BOARD_LMLBT4 0x76
|
|
|
|
#define BTTV_BOARD_TEKRAM_M205 0x77
|
|
|
|
#define BTTV_BOARD_CONTVFMI 0x78
|
|
|
|
#define BTTV_BOARD_PICOLO_TETRA_CHIP 0x79
|
|
|
|
#define BTTV_BOARD_SPIRIT_TV 0x7a
|
|
|
|
#define BTTV_BOARD_AVDVBT_771 0x7b
|
|
|
|
#define BTTV_BOARD_AVDVBT_761 0x7c
|
|
|
|
#define BTTV_BOARD_MATRIX_VISIONSQ 0x7d
|
|
|
|
#define BTTV_BOARD_MATRIX_VISIONSLC 0x7e
|
|
|
|
#define BTTV_BOARD_APAC_VIEWCOMP 0x7f
|
|
|
|
#define BTTV_BOARD_DVICO_DVBT_LITE 0x80
|
|
|
|
#define BTTV_BOARD_VGEAR_MYVCD 0x81
|
|
|
|
#define BTTV_BOARD_SUPER_TV 0x82
|
|
|
|
#define BTTV_BOARD_TIBET_CS16 0x83
|
|
|
|
#define BTTV_BOARD_KODICOM_4400R 0x84
|
|
|
|
#define BTTV_BOARD_KODICOM_4400R_SL 0x85
|
|
|
|
#define BTTV_BOARD_ADLINK_RTV24 0x86
|
2005-11-09 12:36:52 +07:00
|
|
|
#define BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE 0x87
|
2005-11-09 12:37:03 +07:00
|
|
|
#define BTTV_BOARD_ACORP_Y878F 0x88
|
|
|
|
#define BTTV_BOARD_CONCEPTRONIC_CTVFMI2 0x89
|
|
|
|
#define BTTV_BOARD_PV_BT878P_2E 0x8a
|
|
|
|
#define BTTV_BOARD_PV_M4900 0x8b
|
|
|
|
#define BTTV_BOARD_OSPREY440 0x8c
|
2005-11-09 12:37:38 +07:00
|
|
|
#define BTTV_BOARD_ASOUND_SKYEYE 0x8d
|
2018-01-05 01:08:56 +07:00
|
|
|
#define BTTV_BOARD_SABRENT_TVFM 0x8e
|
2006-01-10 00:25:01 +07:00
|
|
|
#define BTTV_BOARD_HAUPPAUGE_IMPACTVCB 0x8f
|
2006-01-12 04:40:09 +07:00
|
|
|
#define BTTV_BOARD_MACHTV_MAGICTV 0x90
|
2007-04-03 00:22:39 +07:00
|
|
|
#define BTTV_BOARD_SSAI_SECURITY 0x91
|
|
|
|
#define BTTV_BOARD_SSAI_ULTRASOUND 0x92
|
2007-06-25 23:02:16 +07:00
|
|
|
#define BTTV_BOARD_VOODOOTV_200 0x93
|
2007-06-28 22:19:20 +07:00
|
|
|
#define BTTV_BOARD_DVICO_FUSIONHDTV_2 0x94
|
2007-10-02 22:23:39 +07:00
|
|
|
#define BTTV_BOARD_TYPHOON_TVTUNERPCI 0x95
|
V4L/DVB (7366): Support for a 16-channel bt878 card
I have what looks like a Geovision GV-600 (or 650) card. It has a large
chip in the middle labeled
CONEXANT
FUSION 878A
25878-13
E345881.1
0312 TAIWAN
It has an audio connector coming out from a chip labeled
ATMEL
0242
AT89C2051-24PI
It is identified as follows on my Debian GNU/Linux Etch (kernel 2.6.18)
...
01:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
01:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
...
01:0a.0 0400: 109e:036e (rev 11)
Subsystem: 008a:763c
Flags: bus master, medium devsel, latency 64, IRQ 58
Memory at dfffe000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data
Capabilities: [4c] Power Management version 2
01:0a.1 0480: 109e:0878 (rev 11)
Subsystem: 008a:763c
Flags: bus master, medium devsel, latency 64, IRQ 58
Memory at dffff000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data
Capabilities: [4c] Power Management version 2
It was being detected as a GENERIC UNKNOWN CARD both by the 2.6.18
kernel and the latest v4l-dvb drivers, but it did not work at all. The
card has sixteen (16) BNC video inputs, four of them on the board itself
and twelve on three daughter-cards. It has a single bt878 chip, no tuner
and what looks like and audio input. After doing some research I managed
to get only eight channels working by forcing card=125 and those DID NOT
match channels 0-7 on the card, and no audio.
Based on what was working for card=125, I added the card definition
block, added a specific muxsel routine and got the card working fully
with xawtv, where the sixteen channels show up as Composite0 to
Composite15, matching the channel labels in the card and daughter-cards.
I have made no efforts yet to get audio working, but would appreciate
any pointers.
Signed-off-by: Ernesto Hernández-Novich <emhn@usb.ve>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-23 00:45:58 +07:00
|
|
|
#define BTTV_BOARD_GEOVISION_GV600 0x96
|
2008-04-23 00:45:58 +07:00
|
|
|
#define BTTV_BOARD_KOZUMI_KTV_01C 0x97
|
2008-08-05 20:14:13 +07:00
|
|
|
#define BTTV_BOARD_ENLTV_FM_2 0x98
|
2008-11-22 05:00:55 +07:00
|
|
|
#define BTTV_BOARD_VD012 0x99
|
|
|
|
#define BTTV_BOARD_VD012_X1 0x9a
|
|
|
|
#define BTTV_BOARD_VD012_X2 0x9b
|
2009-01-23 09:07:26 +07:00
|
|
|
#define BTTV_BOARD_IVCE8784 0x9c
|
V4L/DVB (10827): Add support for GeoVision GV-800(S)
I have a GeoVision GV-800(S) card, it has 4 CONEXANT BT878A chips.
It has 16 video inputs and 4 audio inputs, and it is almost identical
to the GV-800, as seen on http://bttv-gallery.de .
The only difference appears to be the analog mux, it has a CD22M3494
in place of the MT8816AP. The card has a blue PCB, as seen in this
picture: http://www.gsbr.com.br/imagem/kits/GeoVision%20GV%20800.jpg .
This card wasn't originally supported, and it was detected as
UNKNOWN/GENERIC. The video inputs weren't working, so I tried
"forcing" a few cards like the GeoVision GV-600, but there was still
no video. So I made a patch to support this card, based on the Kodicom
4400r.
The GV-800(S) is identified as follows:
...
02:00.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
02:00.1 Multimedia controller: Brooktree Corporation Bt878 Audio
Capture (rev 11)
02:04.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
02:04.1 Multimedia controller: Brooktree Corporation Bt878 Audio
Capture (rev 11)
02:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
02:08.1 Multimedia controller: Brooktree Corporation Bt878 Audio
Capture (rev 11)
02:0c.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
02:0c.1 Multimedia controller: Brooktree Corporation Bt878 Audio
Capture (rev 11)
...
02:00.0 0400: 109e:036e (rev 11)
Subsystem: 800a:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdfff000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
Kernel modules: bttv
02:00.1 0480: 109e:0878 (rev 11)
Subsystem: 800a:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdffe000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
02:04.0 0400: 109e:036e (rev 11)
Subsystem: 800b:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdffd000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
Kernel modules: bttv
02:04.1 0480: 109e:0878 (rev 11)
Subsystem: 800b:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdffc000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
02:08.0 0400: 109e:036e (rev 11)
Subsystem: 800c:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdffb000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
Kernel modules: bttv
02:08.1 0480: 109e:0878 (rev 11)
Subsystem: 800c:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdffa000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
02:0c.0 0400: 109e:036e (rev 11)
Subsystem: 800d:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdff9000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
Kernel modules: bttv
02:0c.1 0480: 109e:0878 (rev 11)
Subsystem: 800d:763d
Flags: bus master, medium devsel, latency 32, IRQ 10
Memory at cdff8000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
As you can see, the GV-800(S) card is almost identical to the GV-800
on bttv-gallery, so this patch might also work for that card. If not,
only a few changes should be required on the gv800s_write() function.
After this patch, the video inputs work correctly on linux 2.6.24 and
2.6.27 using the software 'motion'. The input order may seem a little
odd, but it's the order the original software/driver uses, and I decided
to keep that order to get the most out of the card.
I tried to get the audio working with the snd-bt87x module, but I only
get noise from every audio input, even after selecting a different mux
with alsamixer. Also, after trying to play sound from those sources, I
randomly get a RISC error about an invalid RISC opcode, and then that
output stops working. I also can't change the sampling rate when
recording. Any pointers to adding audio support are welcome.
Signed-off-by: Bruno Christo <bchristo@inf.ufsm.br>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2009-03-03 08:38:59 +07:00
|
|
|
#define BTTV_BOARD_GEOVISION_GV800S 0x9d
|
|
|
|
#define BTTV_BOARD_GEOVISION_GV800S_SL 0x9e
|
2009-03-13 07:43:34 +07:00
|
|
|
#define BTTV_BOARD_PV183 0x9f
|
2011-11-06 20:15:47 +07:00
|
|
|
#define BTTV_BOARD_TVT_TD3116 0xa0
|
2012-07-19 19:36:33 +07:00
|
|
|
#define BTTV_BOARD_APOSONIC_WDVR 0xa1
|
2013-04-12 19:30:29 +07:00
|
|
|
#define BTTV_BOARD_ADLINK_MPG24 0xa2
|
2013-04-14 22:39:09 +07:00
|
|
|
#define BTTV_BOARD_BT848_CAP_14 0xa3
|
2013-04-20 18:57:41 +07:00
|
|
|
#define BTTV_BOARD_CYBERVISION_CV06 0xa4
|
2014-02-08 00:56:17 +07:00
|
|
|
#define BTTV_BOARD_KWORLD_VSTREAM_XPERT 0xa5
|
2014-03-19 16:50:41 +07:00
|
|
|
#define BTTV_BOARD_PCI_8604PW 0xa6
|
2005-04-17 05:20:36 +07:00
|
|
|
|
|
|
|
/* more card-specific defines */
|
|
|
|
#define PT2254_L_CHANNEL 0x10
|
|
|
|
#define PT2254_R_CHANNEL 0x08
|
|
|
|
#define PT2254_DBS_IN_2 0x400
|
|
|
|
#define PT2254_DBS_IN_10 0x20000
|
|
|
|
#define WINVIEW_PT2254_CLK 0x40
|
|
|
|
#define WINVIEW_PT2254_DATA 0x20
|
|
|
|
#define WINVIEW_PT2254_STROBE 0x80
|
|
|
|
|
|
|
|
struct bttv_core {
|
|
|
|
/* device structs */
|
2009-03-14 22:36:54 +07:00
|
|
|
struct v4l2_device v4l2_dev;
|
2005-04-17 05:20:36 +07:00
|
|
|
struct pci_dev *pci;
|
|
|
|
struct i2c_adapter i2c_adap;
|
|
|
|
struct list_head subs; /* struct bttv_sub_device */
|
|
|
|
|
|
|
|
/* device config */
|
2005-11-09 12:37:43 +07:00
|
|
|
unsigned int nr; /* dev nr (for printk("bttv%d: ..."); */
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned int type; /* card type (pointer into tvcards[]) */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct bttv;
|
|
|
|
|
2009-01-29 07:32:59 +07:00
|
|
|
struct tvcard {
|
2005-11-09 12:37:43 +07:00
|
|
|
char *name;
|
2009-01-29 07:32:59 +07:00
|
|
|
void (*volume_gpio)(struct bttv *btv, __u16 volume);
|
|
|
|
void (*audio_mode_gpio)(struct bttv *btv, struct v4l2_tuner *tuner, int set);
|
|
|
|
void (*muxsel_hook)(struct bttv *btv, unsigned int input);
|
|
|
|
|
V4L/DVB (10567): bttv: shrink muxsel data in card database
Over half of the card database was used to store muxsel data. 64 bytes
were used to store one 32 bit word for each of up to 16 inputs.
The Bt8x8 only has two bits to control its mux, so muxsel data for 16
inputs will fit into a single 32 bit word. There were a couple cards that
had special muxsel data that didn't fit in two bits, but I cleaned them up
in earlier patches.
Unfortunately, C doesn't allow us to have an array of bit fields. This
makes initializing the structure more of a pain. But with some cpp magic,
we can do it by changing:
.muxsel = { 2, 3, 0, 1 },
.muxsel = { 2, 2, 2, 2, 3, 3, 3, 3, 1, 1 },
Into:
.muxsel = MUXSEL(2, 3, 0, 1),
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
That's not so bad. MUXSEL is a fancy macro that packs the arguments (of
which there can be one to sixteen!) into a single word two bits at a time.
It's a compile time constant (a variadic function wouldn't be) so we can
use it to initialize the structure. It's important the the arguments to
the macro only be plain decimal integers. Stuff like "0x01", "(2)", or
"MUX3" won't work properly.
I also created an accessor function, bttv_muxsel(btv, input), that gets the
mux bits for the selected input. It makes it cleaner to change the way the
muxsel data is stored.
This patch doesn't change the code size and decreases the datasegment by
9440 bytes.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2009-01-29 07:32:59 +07:00
|
|
|
/* MUX bits for each input, two bits per input starting with the LSB */
|
|
|
|
u32 muxsel; /* Use MUXSEL() to set */
|
|
|
|
|
2005-11-09 12:37:43 +07:00
|
|
|
u32 gpiomask;
|
2006-03-19 07:31:00 +07:00
|
|
|
u32 gpiomux[4]; /* Tuner, Radio, external, internal */
|
|
|
|
u32 gpiomute; /* GPIO mute setting */
|
2005-11-09 12:37:43 +07:00
|
|
|
u32 gpiomask2; /* GPIO MUX mask */
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2009-01-29 07:32:59 +07:00
|
|
|
unsigned int tuner_type;
|
|
|
|
u8 tuner_addr;
|
|
|
|
u8 video_inputs; /* Number of inputs */
|
|
|
|
unsigned int svhs:4; /* Which input is s-video */
|
|
|
|
#define NO_SVHS 15
|
2009-01-29 07:32:59 +07:00
|
|
|
unsigned int pll:2;
|
|
|
|
#define PLL_NONE 0
|
|
|
|
#define PLL_28 1
|
|
|
|
#define PLL_35 2
|
2013-04-14 22:39:09 +07:00
|
|
|
#define PLL_14 3
|
2009-01-29 07:32:59 +07:00
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
/* i2c audio flags */
|
|
|
|
unsigned int no_msp34xx:1;
|
|
|
|
unsigned int no_tda7432:1;
|
|
|
|
unsigned int msp34xx_alt:1;
|
2009-03-28 18:29:00 +07:00
|
|
|
/* Note: currently no card definition needs to mark the presence
|
|
|
|
of a RDS saa6588 chip. If this is ever needed, then add a new
|
|
|
|
'has_saa6588' bit here. */
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2009-01-29 07:32:59 +07:00
|
|
|
unsigned int no_video:1; /* video pci function is unused */
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned int has_dvb:1;
|
|
|
|
unsigned int has_remote:1;
|
2009-01-29 07:32:59 +07:00
|
|
|
unsigned int has_radio:1;
|
2009-01-29 07:32:59 +07:00
|
|
|
unsigned int has_dig_in:1; /* Has digital input (always last input) */
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned int no_gpioirq:1;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern struct tvcard bttv_tvcards[];
|
|
|
|
|
V4L/DVB (10567): bttv: shrink muxsel data in card database
Over half of the card database was used to store muxsel data. 64 bytes
were used to store one 32 bit word for each of up to 16 inputs.
The Bt8x8 only has two bits to control its mux, so muxsel data for 16
inputs will fit into a single 32 bit word. There were a couple cards that
had special muxsel data that didn't fit in two bits, but I cleaned them up
in earlier patches.
Unfortunately, C doesn't allow us to have an array of bit fields. This
makes initializing the structure more of a pain. But with some cpp magic,
we can do it by changing:
.muxsel = { 2, 3, 0, 1 },
.muxsel = { 2, 2, 2, 2, 3, 3, 3, 3, 1, 1 },
Into:
.muxsel = MUXSEL(2, 3, 0, 1),
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
That's not so bad. MUXSEL is a fancy macro that packs the arguments (of
which there can be one to sixteen!) into a single word two bits at a time.
It's a compile time constant (a variadic function wouldn't be) so we can
use it to initialize the structure. It's important the the arguments to
the macro only be plain decimal integers. Stuff like "0x01", "(2)", or
"MUX3" won't work properly.
I also created an accessor function, bttv_muxsel(btv, input), that gets the
mux bits for the selected input. It makes it cleaner to change the way the
muxsel data is stored.
This patch doesn't change the code size and decreases the datasegment by
9440 bytes.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2009-01-29 07:32:59 +07:00
|
|
|
/*
|
|
|
|
* This bit of cpp voodoo is used to create a macro with a variable number of
|
|
|
|
* arguments (1 to 16). It will pack each argument into a word two bits at a
|
|
|
|
* time. It can't be a function because it needs to be compile time constant to
|
|
|
|
* initialize structures. Since each argument must fit in two bits, it's ok
|
|
|
|
* that they are changed to octal. One should not use hex number, macros, or
|
|
|
|
* anything else with this macro. Just use plain integers from 0 to 3.
|
|
|
|
*/
|
2018-01-05 01:08:56 +07:00
|
|
|
#define _MUXSELf(a) 0##a << 30
|
V4L/DVB (10567): bttv: shrink muxsel data in card database
Over half of the card database was used to store muxsel data. 64 bytes
were used to store one 32 bit word for each of up to 16 inputs.
The Bt8x8 only has two bits to control its mux, so muxsel data for 16
inputs will fit into a single 32 bit word. There were a couple cards that
had special muxsel data that didn't fit in two bits, but I cleaned them up
in earlier patches.
Unfortunately, C doesn't allow us to have an array of bit fields. This
makes initializing the structure more of a pain. But with some cpp magic,
we can do it by changing:
.muxsel = { 2, 3, 0, 1 },
.muxsel = { 2, 2, 2, 2, 3, 3, 3, 3, 1, 1 },
Into:
.muxsel = MUXSEL(2, 3, 0, 1),
.muxsel = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
That's not so bad. MUXSEL is a fancy macro that packs the arguments (of
which there can be one to sixteen!) into a single word two bits at a time.
It's a compile time constant (a variadic function wouldn't be) so we can
use it to initialize the structure. It's important the the arguments to
the macro only be plain decimal integers. Stuff like "0x01", "(2)", or
"MUX3" won't work properly.
I also created an accessor function, bttv_muxsel(btv, input), that gets the
mux bits for the selected input. It makes it cleaner to change the way the
muxsel data is stored.
This patch doesn't change the code size and decreases the datasegment by
9440 bytes.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2009-01-29 07:32:59 +07:00
|
|
|
#define _MUXSELe(a, b...) 0##a << 28 | _MUXSELf(b)
|
|
|
|
#define _MUXSELd(a, b...) 0##a << 26 | _MUXSELe(b)
|
|
|
|
#define _MUXSELc(a, b...) 0##a << 24 | _MUXSELd(b)
|
|
|
|
#define _MUXSELb(a, b...) 0##a << 22 | _MUXSELc(b)
|
|
|
|
#define _MUXSELa(a, b...) 0##a << 20 | _MUXSELb(b)
|
|
|
|
#define _MUXSEL9(a, b...) 0##a << 18 | _MUXSELa(b)
|
|
|
|
#define _MUXSEL8(a, b...) 0##a << 16 | _MUXSEL9(b)
|
|
|
|
#define _MUXSEL7(a, b...) 0##a << 14 | _MUXSEL8(b)
|
|
|
|
#define _MUXSEL6(a, b...) 0##a << 12 | _MUXSEL7(b)
|
|
|
|
#define _MUXSEL5(a, b...) 0##a << 10 | _MUXSEL6(b)
|
|
|
|
#define _MUXSEL4(a, b...) 0##a << 8 | _MUXSEL5(b)
|
|
|
|
#define _MUXSEL3(a, b...) 0##a << 6 | _MUXSEL4(b)
|
|
|
|
#define _MUXSEL2(a, b...) 0##a << 4 | _MUXSEL3(b)
|
|
|
|
#define _MUXSEL1(a, b...) 0##a << 2 | _MUXSEL2(b)
|
|
|
|
#define MUXSEL(a, b...) (a | _MUXSEL1(b))
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
/* identification / initialization of the card */
|
|
|
|
extern void bttv_idcard(struct bttv *btv);
|
|
|
|
extern void bttv_init_card1(struct bttv *btv);
|
|
|
|
extern void bttv_init_card2(struct bttv *btv);
|
2009-07-20 18:14:17 +07:00
|
|
|
extern void bttv_init_tuner(struct bttv *btv);
|
2005-04-17 05:20:36 +07:00
|
|
|
|
|
|
|
/* card-specific funtions */
|
|
|
|
extern void tea5757_set_freq(struct bttv *btv, unsigned short freq);
|
2009-01-29 07:32:59 +07:00
|
|
|
extern u32 bttv_tda9880_setnorm(struct bttv *btv, u32 gpiobits);
|
2005-04-17 05:20:36 +07:00
|
|
|
|
|
|
|
/* extra tweaks for some chipsets */
|
|
|
|
extern void bttv_check_chipset(void);
|
|
|
|
extern int bttv_handle_chipset(struct bttv *btv);
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
/* exported by bttv-if.c */
|
|
|
|
|
|
|
|
/* this obsolete -- please use the sysfs-based
|
|
|
|
interface below for new code */
|
|
|
|
|
|
|
|
extern struct pci_dev* bttv_get_pcidev(unsigned int card);
|
|
|
|
|
|
|
|
/* sets GPOE register (BT848_GPIO_OUT_EN) to new value:
|
|
|
|
data | (current_GPOE_value & ~mask)
|
|
|
|
returns negative value if error occurred
|
|
|
|
*/
|
|
|
|
extern int bttv_gpio_enable(unsigned int card,
|
|
|
|
unsigned long mask, unsigned long data);
|
|
|
|
|
|
|
|
/* fills data with GPDATA register contents
|
|
|
|
returns negative value if error occurred
|
|
|
|
*/
|
|
|
|
extern int bttv_read_gpio(unsigned int card, unsigned long *data);
|
|
|
|
|
|
|
|
/* sets GPDATA register to new value:
|
|
|
|
(data & mask) | (current_GPDATA_value & ~mask)
|
|
|
|
returns negative value if error occurred
|
|
|
|
*/
|
|
|
|
extern int bttv_write_gpio(unsigned int card,
|
|
|
|
unsigned long mask, unsigned long data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
/* sysfs/driver-moded based gpio access interface */
|
|
|
|
|
|
|
|
struct bttv_sub_device {
|
|
|
|
struct device dev;
|
|
|
|
struct bttv_core *core;
|
|
|
|
struct list_head list;
|
|
|
|
};
|
|
|
|
#define to_bttv_sub_dev(x) container_of((x), struct bttv_sub_device, dev)
|
|
|
|
|
|
|
|
struct bttv_sub_driver {
|
|
|
|
struct device_driver drv;
|
V4L/DVB (9521): V4L: struct device - replace bus_id with dev_name(), dev_set_name()
This patch is part of a larger patch series which will remove
the "char bus_id[20]" name string from struct device. The device
name is managed in the kobject anyway, and without any size
limitation, and just needlessly copied into "struct device".
To set and read the device name dev_name(dev) and dev_set_name(dev)
must be used. If your code uses static kobjects, which it shouldn't
do, "const char *init_name" can be used to statically provide the
name the registered device should have. At registration time, the
init_name field is cleared, to enforce the use of dev_name(dev) to
access the device name at a later time.
We need to get rid of all occurrences of bus_id in the entire tree
to be able to enable the new interface. Please apply this patch,
and possibly convert any remaining remaining occurrences of bus_id.
We want to submit a patch to -next, which will remove bus_id from
"struct device", to find the remaining pieces to convert, and finally
switch over to the new api, which will remove the 20 bytes array
and does no longer have a size limitation.
Thanks,
Kay
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2008-10-30 10:51:46 +07:00
|
|
|
char wanted[20];
|
2006-01-06 18:42:03 +07:00
|
|
|
int (*probe)(struct bttv_sub_device *sub);
|
|
|
|
void (*remove)(struct bttv_sub_device *sub);
|
2005-04-17 05:20:36 +07:00
|
|
|
};
|
|
|
|
#define to_bttv_sub_drv(x) container_of((x), struct bttv_sub_driver, drv)
|
|
|
|
|
|
|
|
int bttv_sub_register(struct bttv_sub_driver *drv, char *wanted);
|
|
|
|
int bttv_sub_unregister(struct bttv_sub_driver *drv);
|
|
|
|
|
|
|
|
/* gpio access functions */
|
|
|
|
void bttv_gpio_inout(struct bttv_core *core, u32 mask, u32 outbits);
|
|
|
|
u32 bttv_gpio_read(struct bttv_core *core);
|
|
|
|
void bttv_gpio_write(struct bttv_core *core, u32 value);
|
|
|
|
void bttv_gpio_bits(struct bttv_core *core, u32 mask, u32 bits);
|
|
|
|
|
|
|
|
#define gpio_inout(mask,bits) bttv_gpio_inout(&btv->c, mask, bits)
|
|
|
|
#define gpio_read() bttv_gpio_read(&btv->c)
|
|
|
|
#define gpio_write(value) bttv_gpio_write(&btv->c, value)
|
|
|
|
#define gpio_bits(mask,bits) bttv_gpio_bits(&btv->c, mask, bits)
|
|
|
|
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
/* i2c */
|
|
|
|
|
2009-03-28 18:29:00 +07:00
|
|
|
#define bttv_call_all(btv, o, f, args...) \
|
|
|
|
v4l2_device_call_all(&btv->c.v4l2_dev, 0, o, f, ##args)
|
|
|
|
|
2012-09-09 19:23:31 +07:00
|
|
|
#define bttv_call_all_err(btv, o, f, args...) \
|
|
|
|
v4l2_device_call_until_err(&btv->c.v4l2_dev, 0, o, f, ##args)
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
extern int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for);
|
|
|
|
extern int bttv_I2CWrite(struct bttv *btv, unsigned char addr, unsigned char b1,
|
|
|
|
unsigned char b2, int both);
|
|
|
|
extern void bttv_readee(struct bttv *btv, unsigned char *eedata, int addr);
|
|
|
|
|
2006-01-10 00:25:25 +07:00
|
|
|
extern int bttv_input_init(struct bttv *dev);
|
|
|
|
extern void bttv_input_fini(struct bttv *dev);
|
|
|
|
extern void bttv_input_irq(struct bttv *dev);
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
#endif /* _BTTV_H_ */
|