piSmasher Configuration Libraries
piSmasher peripheral device configuration libraries
tda998x.h
Go to the documentation of this file.
1 
46 #ifndef __TDA998X_H
47 #define __TDA998X_H
48 
49 #include <stdint.h>
50 #include <stdbool.h>
51 
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55 
65  SINK_DVI = 0,
66  SINK_HDMI = 0x01,
67  SINK_EDID = 0x02
68 };
69 
126 };
132  VINMODE_YUV422 = 3,
133 };
138  SYNCSRC_EXT_VS = 2
139 };
140 
149 };
155  UPSAMPLE_AUTO = 3,
156 };
160  PIXTOGL_ENABLE = 1,
161 };
169  SCALER_MODE_AUTO = 2,
170 };
171 
178  MTX_MODE_AUTO = 1,
179 };
180 
181 #define MTX_COEFF_LEN (9)
182 struct tda998x_mtx_coeff {
183  int16_t coeff[MTX_COEFF_LEN];
184 };
194 };
199  VOUTMODE_YUV444 = 2
200 };
205  VOUT_DBITS_10 = 2,
206 };
212  COLORDEPTH_48 = 3
213 };
214 
221  VQR_RGB_LIMITED = 2
222 };
223 
227 struct tda998x_pkt {
228  uint8_t header[3];
229  uint8_t data[28];
230 };
236  MPEG_FRAME_P = 3,
237 };
240  uint32_t bitrate;
242  bool repeat;
243 };
244 
245 enum tda998x_spd_dev {
246  SPDINFO_UNKNOWN = 0,
247  SPDINFO_DIGITAL_STB = 1,
248  SPDINFO_DVD = 2,
249  SPDINFO_DVHS = 3,
250  SPDINFO_HDD_VIDEO = 4,
251  SPDINFO_DVC = 5,
252  SPDINFO_DSC = 6,
253  SPDINFO_VIDEO_CD = 7,
254  SPDINFO_GAME = 8,
255  SPDINFO_PC = 9,
256 };
259  uint8_t vname[8];
260  uint8_t desc[16];
261  enum tda998x_spd_dev dev_info;
262 } ;
263 
278 };
295  enum tda998x_vqr vqr;
296 };
306 #define EDID_BLOCK_SIZE (128)
307 
308 enum tda998x_edid_state {
309  EDID_NOT_READ = 0,
310  EDID_READ,
311  EDID_ERR_BLOCK_0
312 };
314 struct tda998x_edid {
315  uint8_t *block;
316  int len;
317  int count;
318  int req_id;
319  enum tda998x_edid_state state;
320  enum tda998x_sink sink;
321  bool read_started;
322 };
332  int hbr;
333  int dst;
334  int oba;
335 };
339  AFMT_I2S = 1,
340  AFMT_OBA = 2,
341  AFMT_DST = 3,
342  AFMT_HBR = 4
343 };
344 
349  CTSREF_FS64SPDIF = 2,
350 };
351 
354  CTSK1 = 0,
355  CTSK2 = 1,
356  CTSK3 = 2,
357  CTSK4 = 3,
358  CTSK8 = 4,
359  CTSK_USE_CTSX = 5,
360 };
361 
364  CTSMTS = 0,
365  CTSMTS2 = 1,
366  CTSMTS4 = 2,
367  CTSMTS8 = 3,
368  CTSMTS_USE_CTSX = 4,
369 };
372  AFS_32K = 0,
373  AFS_44K = 1,
374  AFS_48K = 2,
375  AFS_88K = 3,
376  AFS_96K = 4,
377  AFS_176K = 5,
378  AFS_192K = 6
379 };
380 
387  I2S_WLEN_OTHERS = 0
388 };
389 
398  I2S_FMT_OTH_R = 15
399 };
400 
406  CLKPOLDSD_NACLK = 0x04,
407 };
408 
414  SWAPDSD_ON = 0x02,
415 };
416 
422  DST_RATE_DOUBLE = 1
423 };
425 struct tda998x_aud_ch_status {
426 // tmdlHdmiTxAudioData_t PcmIdentification;
427 // tmdlHdmiTxCScopyright_t CopyrightInfo;
428 // tmdlHdmiTxCSformatInfo_t FormatInfo;
429  uint8_t cat_code;
430 // tmdlHdmiTxCSclkAcc_t clockAccuracy;
431 // tmdlHdmiTxCSmaxWordLength_t maxWordLength;
432 // tmdlHdmiTxCSwordLength_t wordLength;
433 // tmdlHdmiTxCSorigAfs_t origSampleFreq;
434 };
435 
438  uint8_t type;
439  uint8_t nchan;
440  uint8_t samp_freq;
441  uint8_t samp_size;
442  uint8_t chan_alloc;
443  bool dmix_inhib;
444  uint8_t lvl_shift;
445 };
453  uint8_t ch_alloc;
455 };
464 struct tda998x_cfg {
465  uint8_t id;
466  uint16_t hdmi_addr;
467  uint16_t cec_addr;
468  int (*i2c_write) (uint16_t addr, uint8_t reg, uint8_t *data);
469  int (*i2c_read) (uint16_t addr, uint8_t reg, uint8_t *data);
470  uint8_t cur_page;
471 };
472 
481 };
482 
483 enum tda998x_hotplug_status {
484  HOTPLUG_INACTIVE = 0,
485  HOTPLUG_ACTIVE
486 };
487 
503 };
504 
508 struct tda998x_dev {
509  int id;
510  struct tda998x_cfg *cfg;
511  struct tda998x_vidin_cfg *vin_cfg;
512  struct tda998x_vidout_cfg *vout_cfg;
513  uint8_t features;
514  uint16_t version;
515  enum tda998x_state state;
516  enum tda998x_sink sink;
517  struct tda998x_edid *edid;
518  uint8_t int_level;
519  enum tda998x_hotplug_status hotplug_status;
520  int (*callback[CALLBACK_VS_RPT])(struct tda998x_dev *dev);
521 
522 };
523 
524 int tda998x_init(struct tda998x_dev *dev, struct tda998x_cfg *cfg);
525 int tda998x_edid_get_block(struct tda998x_dev *dev,
526  uint8_t *block,
527  int nblocks,
528  int len);
529 int tda998x_read_edid(struct tda998x_dev *dev, uint8_t *data);
530 int tda998x_get_hotplug_status(struct tda998x_dev *dev,
531  enum tda998x_hotplug_status *hotplug_status,
532  bool client);
533 int tda998x_set_input_output(struct tda998x_dev *dev,
534  struct tda998x_vidin_cfg *vidin_cfg,
535  struct tda998x_vidout_cfg *vidout_cfg,
536  struct tda998x_audin_cfg *audin_cfg,
537  enum tda998x_sink sink);
538 int tda998x_handle_interrupt(struct tda998x_dev *dev);
543 #ifdef __cplusplus
544 }
545 #endif
546 
547 #endif /* __TDA998X_H */
Definition: tda998x.h:491
Definition: tda998x.h:167
Definition: tda998x.h:235
Definition: tda998x.h:446
Definition: tda998x.h:330
Definition: tda998x.h:113
Definition: tda998x.h:498
Definition: tda998x.h:476
Definition: tda998x.h:208
Definition: tda998x.h:238
Definition: tda998x.h:101
Definition: tda998x.h:117
int count
Definition: tda998x.h:316
Definition: tda998x.h:189
Definition: tda998x.h:499
Definition: tda998x.h:196
Definition: tda998x.h:109
tda998x_sync_src
Definition: tda998x.h:134
tda998x_dst_rate
DSD data transfer rates.
Definition: tda998x.h:419
int oba
Definition: tda998x.h:333
tda998x_upsample
Definition: tda998x.h:150
Definition: tda998x.h:495
Definition: tda998x.h:73
struct tda998x_aud_ch_status ch_status
Definition: tda998x.h:453
uint8_t data[28]
Definition: tda998x.h:228
Definition: tda998x.h:397
Definition: tda998x.h:89
Definition: tda998x.h:102
Definition: tda998x.h:477
Definition: tda998x.h:500
tda998x_ctsk
Definition: tda998x.h:352
Definition: tda998x.h:118
Definition: tda998x.h:168
Definition: tda998x.h:346
Definition: tda998x.h:373
enum tda998x_vid_fmt format
Definition: tda998x.h:272
Definition: tda998x.h:114
Definition: tda998x.h:371
Definition: tda998x.h:120
Definition: tda998x.h:420
Definition: tda998x.h:131
Definition: tda998x.h:74
tda998x_scaler_mode
Definition: tda998x.h:165
Definition: tda998x.h:354
Definition: tda998x.h:154
Definition: tda998x.h:122
tda998x_color_depth
Definition: tda998x.h:207
Definition: tda998x.h:348
Definition: tda998x.h:107
uint8_t chan_alloc
Definition: tda998x.h:441
tda998x_cts_ref
Definition: tda998x.h:345
Definition: tda998x.h:204
Definition: tda998x.h:372
uint8_t samp_size
Definition: tda998x.h:440
Definition: tda998x.h:494
Definition: tda998x.h:92
Definition: tda998x.h:192
tda998x_vidin_mode
Definition: tda998x.h:127
Definition: tda998x.h:158
Definition: tda998x.h:413
Definition: tda998x.h:76
Definition: tda998x.h:84
tda998x_aud_i2s_fmt
Audio I2S format.
Definition: tda998x.h:392
tda998x_aud_fmt
Definition: tda998x.h:336
Definition: tda998x.h:376
int dst
Definition: tda998x.h:332
int len
Definition: tda998x.h:315
Definition: tda998x.h:97
Definition: tda998x.h:91
Definition: tda998x.h:339
TDA998X device.
Definition: tda998x.h:507
int req_id
Definition: tda998x.h:317
Definition: tda998x.h:98
Definition: tda998x.h:497
Definition: tda998x.h:396
Definition: tda998x.h:338
Definition: tda998x.h:233
Definition: tda998x.h:384
Definition: tda998x.h:152
Definition: tda998x.h:211
Definition: tda998x.h:95
Definition: tda998x.h:64
Definition: tda998x.h:363
Definition: tda998x.h:489
tda998x_aud_rate
Definition: tda998x.h:370
enum tda998x_aud_fmt format
Definition: tda998x.h:447
Definition: tda998x.h:496
uint32_t bitrate
Definition: tda998x.h:239
Definition: tda998x.h:353
Definition: tda998x.h:86
Definition: tda998x.h:209
Definition: tda998x.h:479
Definition: tda998x.h:356
tda998x_clkpol_dsd
DSD clock polarities.
Definition: tda998x.h:403
Definition: tda998x.h:146
Definition: tda998x.h:110
Definition: tda998x.h:81
enum tda998x_dst_rate dst_rate
Definition: tda998x.h:451
enum tda998x_aud_i2s_fmt i2s_format
Definition: tda998x.h:449
enum tda998x_vqr vqr
Definition: tda998x.h:294
Definition: tda998x.h:366
tda998x_sink
Definition: tda998x.h:63
Definition: tda998x.h:116
Definition: tda998x.h:190
bool dmix_inhib
Definition: tda998x.h:442
Definition: tda998x.h:112
tda998x_aud_i2s_wlen
Audio I2S word length.
Definition: tda998x.h:383
enum tda998x_vidin_mode mode
Definition: tda998x.h:273
tda998x_state
TDA998X state.
Definition: tda998x.h:475
Definition: tda998x.h:119
Definition: tda998x.h:421
Definition: tda998x.h:203
Definition: tda998x.h:136
Definition: tda998x.h:130
Definition: tda998x.h:77
Video Output Configuration.
Definition: tda998x.h:290
Definition: tda998x.h:404
uint8_t header[3]
Definition: tda998x.h:227
Definition: tda998x.h:313
Definition: tda998x.h:87
Definition: tda998x.h:202
enum tda998x_vidout_mode mode
Definition: tda998x.h:292
enum tda998x_aud_i2s_wlen i2s_wlen
Definition: tda998x.h:450
Definition: tda998x.h:436
Definition: tda998x.h:65
Definition: tda998x.h:78
enum tda998x_vid_fmt format
Definition: tda998x.h:291
int tda998x_edid_get_block(struct tda998x_dev *dev, uint8_t *block, int nblocks, int len)
Get EDID Block Data.
Definition: tda998x.c:2747
Definition: tda998x.h:99
Metadata packet structure.
Definition: tda998x.h:226
Definition: tda998x.h:478
Definition: tda998x.h:137
Definition: tda998x.h:493
Definition: tda998x.h:355
Definition: tda998x.h:147
Definition: tda998x.h:82
Definition: tda998x.h:80
Definition: tda998x.h:395
enum tda998x_mpeg_frame frame
Definition: tda998x.h:240
int tda998x_set_input_output(struct tda998x_dev *dev, struct tda998x_vidin_cfg *vidin_cfg, struct tda998x_vidout_cfg *vidout_cfg, struct tda998x_audin_cfg *audin_cfg, enum tda998x_sink sink)
Set Input and Output.
Definition: tda998x.c:4801
tda998x_format_3d
Definition: tda998x.h:188
Definition: tda998x.h:94
Definition: tda998x.h:341
tda998x_swap_dsd
DSD data swap values.
Definition: tda998x.h:411
Definition: tda998x.h:394
Definition: tda998x.h:83
Definition: tda998x.h:492
Definition: tda998x.h:218
Definition: tda998x.h:93
Definition: tda998x.h:257
tda998x_vidout_mode
Definition: tda998x.h:195
uint8_t vname[8]
Definition: tda998x.h:258
Definition: tda998x.h:386
Definition: tda998x.h:176
uint8_t nchan
Definition: tda998x.h:438
Definition: tda998x.h:191
Definition: tda998x.h:358
Definition: tda998x.h:198
Definition: tda998x.h:85
Definition: tda998x.h:375
tda998x_dwidth
Definition: tda998x.h:201
uint8_t desc[16]
Definition: tda998x.h:259
Definition: tda998x.h:337
Definition: tda998x.h:219
tda998x_pix_tgl
Definition: tda998x.h:157
Definition: tda998x.h:153
Definition: tda998x.h:103
Definition: tda998x.h:96
Definition: tda998x.h:424
Definition: tda998x.h:151
Definition: tda998x.h:365
Definition: tda998x.h:88
Definition: tda998x.h:105
tda998x_callback
Definition: tda998x.h:488
Definition: tda998x.h:100
Definition: tda998x.h:181
Definition: tda998x.h:357
Definition: tda998x.h:108
Definition: tda998x.h:123
enum tda998x_sync_src sync_src
Definition: tda998x.h:274
Definition: tda998x.h:115
uint8_t samp_freq
Definition: tda998x.h:439
enum tda998x_pix_rate pix_rate
Definition: tda998x.h:275
Definition: tda998x.h:135
Definition: tda998x.h:121
Definition: tda998x.h:364
Definition: tda998x.h:232
enum tda998x_format_3d format_3d
Definition: tda998x.h:276
Definition: tda998x.h:405
Definition: tda998x.h:79
Definition: tda998x.h:124
Definition: tda998x.h:129
TDA998X driver configuration.
Definition: tda998x.h:463
Definition: tda998x.h:159
Definition: tda998x.h:145
tda998x_mtx_mode
Definition: tda998x.h:175
Definition: tda998x.h:377
tda998x_vqr
Video quantization range.
Definition: tda998x.h:217
Video Input Configuration.
Definition: tda998x.h:271
Definition: tda998x.h:340
tda998x_pix_rate
Definition: tda998x.h:144
uint8_t lvl_shift
Definition: tda998x.h:443
tda998x_mpeg_frame
Definition: tda998x.h:231
Definition: tda998x.h:106
Definition: tda998x.h:385
tda998x_ctsm
Definition: tda998x.h:362
Definition: tda998x.h:393
uint8_t ch_alloc
Definition: tda998x.h:452
enum tda998x_aud_rate rate
Definition: tda998x.h:448
tda998x_vid_fmt
EIA/CEA-861B video format type.
Definition: tda998x.h:72
Definition: tda998x.h:111
bool repeat
Definition: tda998x.h:241
int hbr
Definition: tda998x.h:331
Definition: tda998x.h:66
Definition: tda998x.h:501
enum tda998x_spd_dev dev_info
Definition: tda998x.h:260
Definition: tda998x.h:210
Definition: tda998x.h:197
Definition: tda998x.h:490
Definition: tda998x.h:90
Definition: tda998x.h:104
uint8_t * block
Definition: tda998x.h:314
Definition: tda998x.h:177
Definition: tda998x.h:367
Definition: tda998x.h:128
Definition: tda998x.h:234
uint8_t type
Definition: tda998x.h:437
Definition: tda998x.h:347
Definition: tda998x.h:220
Definition: tda998x.h:374
Definition: tda998x.h:166
enum tda998x_color_depth color_depth
Definition: tda998x.h:293
Definition: tda998x.h:75
Definition: tda998x.h:412