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