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