xref: /openbmc/linux/include/media/tveeprom.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2ac19ecc6SMauro Carvalho Chehab 
3326ab27bSMauro Carvalho Chehab /*
4326ab27bSMauro Carvalho Chehab  * tveeprom - Contains structures and functions to work with Hauppauge
5326ab27bSMauro Carvalho Chehab  *	      eeproms.
6326ab27bSMauro Carvalho Chehab  */
733001010SHans Verkuil 
8*de163422SJakub Kicinski #include <uapi/linux/if_ether.h>
9574e2af7SJoe Perches 
10326ab27bSMauro Carvalho Chehab /**
11326ab27bSMauro Carvalho Chehab  * enum tveeprom_audio_processor - Specifies the type of audio processor
12326ab27bSMauro Carvalho Chehab  *				   used on a Hauppauge device.
13326ab27bSMauro Carvalho Chehab  *
14326ab27bSMauro Carvalho Chehab  * @TVEEPROM_AUDPROC_NONE:	No audio processor present
15326ab27bSMauro Carvalho Chehab  * @TVEEPROM_AUDPROC_INTERNAL:	The audio processor is internal to the
16326ab27bSMauro Carvalho Chehab  *				video processor
17326ab27bSMauro Carvalho Chehab  * @TVEEPROM_AUDPROC_MSP:	The audio processor is a MSPXXXX device
18326ab27bSMauro Carvalho Chehab  * @TVEEPROM_AUDPROC_OTHER:	The audio processor is another device
19326ab27bSMauro Carvalho Chehab  */
20326ab27bSMauro Carvalho Chehab enum tveeprom_audio_processor {
21326ab27bSMauro Carvalho Chehab 	TVEEPROM_AUDPROC_NONE,
22326ab27bSMauro Carvalho Chehab 	TVEEPROM_AUDPROC_INTERNAL,
23326ab27bSMauro Carvalho Chehab 	TVEEPROM_AUDPROC_MSP,
24326ab27bSMauro Carvalho Chehab 	TVEEPROM_AUDPROC_OTHER,
25326ab27bSMauro Carvalho Chehab };
26326ab27bSMauro Carvalho Chehab 
27326ab27bSMauro Carvalho Chehab /**
28326ab27bSMauro Carvalho Chehab  * struct tveeprom - Contains the fields parsed from Hauppauge eeproms
29326ab27bSMauro Carvalho Chehab  *
30326ab27bSMauro Carvalho Chehab  * @has_radio:			1 if the device has radio; 0 otherwise.
3189cb3ddbSMauro Carvalho Chehab  *
32326ab27bSMauro Carvalho Chehab  * @has_ir:			If has_ir == 0, then it is unknown what the IR
33326ab27bSMauro Carvalho Chehab  *				capabilities are. Otherwise:
34326ab27bSMauro Carvalho Chehab  *				bit 0) 1 (= IR capabilities are known);
35326ab27bSMauro Carvalho Chehab  *				bit 1) IR receiver present;
36326ab27bSMauro Carvalho Chehab  *				bit 2) IR transmitter (blaster) present.
3789cb3ddbSMauro Carvalho Chehab  *
38326ab27bSMauro Carvalho Chehab  * @has_MAC_address:		0: no MAC, 1: MAC present, 2: unknown.
39326ab27bSMauro Carvalho Chehab  * @tuner_type:			type of the tuner (TUNER_*, as defined at
40326ab27bSMauro Carvalho Chehab  *				include/media/tuner.h).
4189cb3ddbSMauro Carvalho Chehab  *
42326ab27bSMauro Carvalho Chehab  * @tuner_formats:		Supported analog TV standards (V4L2_STD_*).
43326ab27bSMauro Carvalho Chehab  * @tuner_hauppauge_model:	Hauppauge's code for the device model number.
44326ab27bSMauro Carvalho Chehab  * @tuner2_type:		type of the second tuner (TUNER_*, as defined
45326ab27bSMauro Carvalho Chehab  *				at include/media/tuner.h).
4689cb3ddbSMauro Carvalho Chehab  *
47326ab27bSMauro Carvalho Chehab  * @tuner2_formats:		Tuner 2 supported analog TV standards
48326ab27bSMauro Carvalho Chehab  *				(V4L2_STD_*).
4989cb3ddbSMauro Carvalho Chehab  *
50326ab27bSMauro Carvalho Chehab  * @tuner2_hauppauge_model:	tuner 2 Hauppauge's code for the device model
51326ab27bSMauro Carvalho Chehab  *				number.
5289cb3ddbSMauro Carvalho Chehab  *
53326ab27bSMauro Carvalho Chehab  * @audio_processor:		analog audio decoder, as defined by enum
54326ab27bSMauro Carvalho Chehab  *				tveeprom_audio_processor.
5589cb3ddbSMauro Carvalho Chehab  *
56326ab27bSMauro Carvalho Chehab  * @decoder_processor:		Hauppauge's code for the decoder chipset.
57326ab27bSMauro Carvalho Chehab  *				Unused by the drivers, as they probe the
58326ab27bSMauro Carvalho Chehab  *				decoder based on the PCI or USB ID.
5989cb3ddbSMauro Carvalho Chehab  *
60326ab27bSMauro Carvalho Chehab  * @model:			Hauppauge's model number
6189cb3ddbSMauro Carvalho Chehab  *
62326ab27bSMauro Carvalho Chehab  * @revision:			Card revision number
6389cb3ddbSMauro Carvalho Chehab  *
64326ab27bSMauro Carvalho Chehab  * @serial_number:		Card's serial number
6589cb3ddbSMauro Carvalho Chehab  *
66326ab27bSMauro Carvalho Chehab  * @rev_str:			Card revision converted to number
6789cb3ddbSMauro Carvalho Chehab  *
68326ab27bSMauro Carvalho Chehab  * @MAC_address:		MAC address for the network interface
69326ab27bSMauro Carvalho Chehab  */
701da177e4SLinus Torvalds struct tveeprom {
711da177e4SLinus Torvalds 	u32 has_radio;
72b654fcdcSHans Verkuil 	u32 has_ir;
73326ab27bSMauro Carvalho Chehab 	u32 has_MAC_address;
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds 	u32 tuner_type;
761da177e4SLinus Torvalds 	u32 tuner_formats;
77f95006f8SHans Verkuil 	u32 tuner_hauppauge_model;
781da177e4SLinus Torvalds 
790f97a931SMauro Carvalho Chehab 	u32 tuner2_type;
800f97a931SMauro Carvalho Chehab 	u32 tuner2_formats;
81f95006f8SHans Verkuil 	u32 tuner2_hauppauge_model;
820f97a931SMauro Carvalho Chehab 
831da177e4SLinus Torvalds 	u32 audio_processor;
840f97a931SMauro Carvalho Chehab 	u32 decoder_processor;
851da177e4SLinus Torvalds 
861da177e4SLinus Torvalds 	u32 model;
871da177e4SLinus Torvalds 	u32 revision;
881da177e4SLinus Torvalds 	u32 serial_number;
891da177e4SLinus Torvalds 	char rev_str[5];
90574e2af7SJoe Perches 	u8 MAC_address[ETH_ALEN];
911da177e4SLinus Torvalds };
921da177e4SLinus Torvalds 
93326ab27bSMauro Carvalho Chehab /**
94326ab27bSMauro Carvalho Chehab  * tveeprom_hauppauge_analog - Fill struct tveeprom using the contents
95326ab27bSMauro Carvalho Chehab  *			       of the eeprom previously filled at
96326ab27bSMauro Carvalho Chehab  *			       @eeprom_data field.
97326ab27bSMauro Carvalho Chehab  *
98326ab27bSMauro Carvalho Chehab  * @tvee:		Struct to where the eeprom parsed data will be filled;
99326ab27bSMauro Carvalho Chehab  * @eeprom_data:	Array with the contents of the eeprom_data. It should
100326ab27bSMauro Carvalho Chehab  *			contain 256 bytes filled with the contents of the
101326ab27bSMauro Carvalho Chehab  *			eeprom read from the Hauppauge device.
102326ab27bSMauro Carvalho Chehab  */
103446aba66SMauro Carvalho Chehab void tveeprom_hauppauge_analog(struct tveeprom *tvee,
1041da177e4SLinus Torvalds 			       unsigned char *eeprom_data);
1051da177e4SLinus Torvalds 
106326ab27bSMauro Carvalho Chehab /**
107326ab27bSMauro Carvalho Chehab  * tveeprom_read - Reads the contents of the eeprom found at the Hauppauge
108326ab27bSMauro Carvalho Chehab  *		   devices.
109326ab27bSMauro Carvalho Chehab  *
110326ab27bSMauro Carvalho Chehab  * @c:		I2C client struct
111326ab27bSMauro Carvalho Chehab  * @eedata:	Array where the eeprom content will be stored.
112326ab27bSMauro Carvalho Chehab  * @len:	Size of @eedata array. If the eeprom content will be latter
113326ab27bSMauro Carvalho Chehab  *		be parsed by tveeprom_hauppauge_analog(), len should be, at
114326ab27bSMauro Carvalho Chehab  *		least, 256.
115326ab27bSMauro Carvalho Chehab  */
1161da177e4SLinus Torvalds int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len);
117