xref: /OK3568_Linux_fs/kernel/include/media/tveeprom.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun 
3*4882a593Smuzhiyun /*
4*4882a593Smuzhiyun  * tveeprom - Contains structures and functions to work with Hauppauge
5*4882a593Smuzhiyun  *	      eeproms.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/if_ether.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /**
11*4882a593Smuzhiyun  * enum tveeprom_audio_processor - Specifies the type of audio processor
12*4882a593Smuzhiyun  *				   used on a Hauppauge device.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * @TVEEPROM_AUDPROC_NONE:	No audio processor present
15*4882a593Smuzhiyun  * @TVEEPROM_AUDPROC_INTERNAL:	The audio processor is internal to the
16*4882a593Smuzhiyun  *				video processor
17*4882a593Smuzhiyun  * @TVEEPROM_AUDPROC_MSP:	The audio processor is a MSPXXXX device
18*4882a593Smuzhiyun  * @TVEEPROM_AUDPROC_OTHER:	The audio processor is another device
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun enum tveeprom_audio_processor {
21*4882a593Smuzhiyun 	TVEEPROM_AUDPROC_NONE,
22*4882a593Smuzhiyun 	TVEEPROM_AUDPROC_INTERNAL,
23*4882a593Smuzhiyun 	TVEEPROM_AUDPROC_MSP,
24*4882a593Smuzhiyun 	TVEEPROM_AUDPROC_OTHER,
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /**
28*4882a593Smuzhiyun  * struct tveeprom - Contains the fields parsed from Hauppauge eeproms
29*4882a593Smuzhiyun  *
30*4882a593Smuzhiyun  * @has_radio:			1 if the device has radio; 0 otherwise.
31*4882a593Smuzhiyun  *
32*4882a593Smuzhiyun  * @has_ir:			If has_ir == 0, then it is unknown what the IR
33*4882a593Smuzhiyun  *				capabilities are. Otherwise:
34*4882a593Smuzhiyun  *				bit 0) 1 (= IR capabilities are known);
35*4882a593Smuzhiyun  *				bit 1) IR receiver present;
36*4882a593Smuzhiyun  *				bit 2) IR transmitter (blaster) present.
37*4882a593Smuzhiyun  *
38*4882a593Smuzhiyun  * @has_MAC_address:		0: no MAC, 1: MAC present, 2: unknown.
39*4882a593Smuzhiyun  * @tuner_type:			type of the tuner (TUNER_*, as defined at
40*4882a593Smuzhiyun  *				include/media/tuner.h).
41*4882a593Smuzhiyun  *
42*4882a593Smuzhiyun  * @tuner_formats:		Supported analog TV standards (V4L2_STD_*).
43*4882a593Smuzhiyun  * @tuner_hauppauge_model:	Hauppauge's code for the device model number.
44*4882a593Smuzhiyun  * @tuner2_type:		type of the second tuner (TUNER_*, as defined
45*4882a593Smuzhiyun  *				at include/media/tuner.h).
46*4882a593Smuzhiyun  *
47*4882a593Smuzhiyun  * @tuner2_formats:		Tuner 2 supported analog TV standards
48*4882a593Smuzhiyun  *				(V4L2_STD_*).
49*4882a593Smuzhiyun  *
50*4882a593Smuzhiyun  * @tuner2_hauppauge_model:	tuner 2 Hauppauge's code for the device model
51*4882a593Smuzhiyun  *				number.
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  * @audio_processor:		analog audio decoder, as defined by enum
54*4882a593Smuzhiyun  *				tveeprom_audio_processor.
55*4882a593Smuzhiyun  *
56*4882a593Smuzhiyun  * @decoder_processor:		Hauppauge's code for the decoder chipset.
57*4882a593Smuzhiyun  *				Unused by the drivers, as they probe the
58*4882a593Smuzhiyun  *				decoder based on the PCI or USB ID.
59*4882a593Smuzhiyun  *
60*4882a593Smuzhiyun  * @model:			Hauppauge's model number
61*4882a593Smuzhiyun  *
62*4882a593Smuzhiyun  * @revision:			Card revision number
63*4882a593Smuzhiyun  *
64*4882a593Smuzhiyun  * @serial_number:		Card's serial number
65*4882a593Smuzhiyun  *
66*4882a593Smuzhiyun  * @rev_str:			Card revision converted to number
67*4882a593Smuzhiyun  *
68*4882a593Smuzhiyun  * @MAC_address:		MAC address for the network interface
69*4882a593Smuzhiyun  */
70*4882a593Smuzhiyun struct tveeprom {
71*4882a593Smuzhiyun 	u32 has_radio;
72*4882a593Smuzhiyun 	u32 has_ir;
73*4882a593Smuzhiyun 	u32 has_MAC_address;
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	u32 tuner_type;
76*4882a593Smuzhiyun 	u32 tuner_formats;
77*4882a593Smuzhiyun 	u32 tuner_hauppauge_model;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun 	u32 tuner2_type;
80*4882a593Smuzhiyun 	u32 tuner2_formats;
81*4882a593Smuzhiyun 	u32 tuner2_hauppauge_model;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	u32 audio_processor;
84*4882a593Smuzhiyun 	u32 decoder_processor;
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	u32 model;
87*4882a593Smuzhiyun 	u32 revision;
88*4882a593Smuzhiyun 	u32 serial_number;
89*4882a593Smuzhiyun 	char rev_str[5];
90*4882a593Smuzhiyun 	u8 MAC_address[ETH_ALEN];
91*4882a593Smuzhiyun };
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /**
94*4882a593Smuzhiyun  * tveeprom_hauppauge_analog - Fill struct tveeprom using the contents
95*4882a593Smuzhiyun  *			       of the eeprom previously filled at
96*4882a593Smuzhiyun  *			       @eeprom_data field.
97*4882a593Smuzhiyun  *
98*4882a593Smuzhiyun  * @tvee:		Struct to where the eeprom parsed data will be filled;
99*4882a593Smuzhiyun  * @eeprom_data:	Array with the contents of the eeprom_data. It should
100*4882a593Smuzhiyun  *			contain 256 bytes filled with the contents of the
101*4882a593Smuzhiyun  *			eeprom read from the Hauppauge device.
102*4882a593Smuzhiyun  */
103*4882a593Smuzhiyun void tveeprom_hauppauge_analog(struct tveeprom *tvee,
104*4882a593Smuzhiyun 			       unsigned char *eeprom_data);
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /**
107*4882a593Smuzhiyun  * tveeprom_read - Reads the contents of the eeprom found at the Hauppauge
108*4882a593Smuzhiyun  *		   devices.
109*4882a593Smuzhiyun  *
110*4882a593Smuzhiyun  * @c:		I2C client struct
111*4882a593Smuzhiyun  * @eedata:	Array where the eeprom content will be stored.
112*4882a593Smuzhiyun  * @len:	Size of @eedata array. If the eeprom content will be latter
113*4882a593Smuzhiyun  *		be parsed by tveeprom_hauppauge_analog(), len should be, at
114*4882a593Smuzhiyun  *		least, 256.
115*4882a593Smuzhiyun  */
116*4882a593Smuzhiyun int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len);
117