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