Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * Thanks to Afatech who kindly provided information.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #ifndef AF9015_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define AF9015_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <linux/hash.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #include "dvb_usb.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include "af9013.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #include "dvb-pll.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include "mt2060.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #include "qt1010.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #include "tda18271.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #include "mxl5005s.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #include "mc44s803.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #include "tda18218.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #include "mxl5007t.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define AF9015_FIRMWARE "dvb-usb-af9015.fw"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define AF9015_I2C_EEPROM  0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define AF9015_I2C_DEMOD   0x1c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define AF9015_USB_TIMEOUT 2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) /* EEPROM locations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define AF9015_EEPROM_IR_MODE        0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define AF9015_EEPROM_TS_MODE        0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define AF9015_EEPROM_DEMOD2_I2C     0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define AF9015_EEPROM_SAW_BW1        0x35
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define AF9015_EEPROM_XTAL_TYPE1     0x36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define AF9015_EEPROM_SPEC_INV1      0x37
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define AF9015_EEPROM_IF1L           0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define AF9015_EEPROM_IF1H           0x39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define AF9015_EEPROM_MT2060_IF1L    0x3a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define AF9015_EEPROM_MT2060_IF1H    0x3b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define AF9015_EEPROM_TUNER_ID1      0x3c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define AF9015_EEPROM_SAW_BW2        0x45
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define AF9015_EEPROM_XTAL_TYPE2     0x46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define AF9015_EEPROM_SPEC_INV2      0x47
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define AF9015_EEPROM_IF2L           0x48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define AF9015_EEPROM_IF2H           0x49
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define AF9015_EEPROM_MT2060_IF2L    0x4a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define AF9015_EEPROM_MT2060_IF2H    0x4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define AF9015_EEPROM_TUNER_ID2      0x4c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) struct req_t {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	u8  cmd;       /* [0] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	/*  seq */     /* [1] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	u8  i2c_addr;  /* [2] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	u16 addr;      /* [3|4] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	u8  mbox;      /* [5] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	u8  addr_len;  /* [6] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	u8  data_len;  /* [7] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	u8  *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) enum af9015_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	GET_CONFIG           = 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	DOWNLOAD_FIRMWARE    = 0x11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	BOOT                 = 0x13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	READ_MEMORY          = 0x20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	WRITE_MEMORY         = 0x21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	READ_WRITE_I2C       = 0x22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	COPY_FIRMWARE        = 0x23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	RECONNECT_USB        = 0x5a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	WRITE_VIRTUAL_MEMORY = 0x26,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	GET_IR_CODE          = 0x27,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	READ_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	WRITE_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) enum af9015_ir_mode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	AF9015_IR_MODE_DISABLED = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	AF9015_IR_MODE_HID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	AF9015_IR_MODE_RLC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	AF9015_IR_MODE_RC6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	AF9015_IR_MODE_POLLING, /* just guess */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define BUF_LEN 63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) struct af9015_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	struct regmap *regmap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	u8 buf[BUF_LEN]; /* bulk USB control message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	u8 ir_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	u8 rc_repeat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	u32 rc_keycode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	u8 rc_last[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	bool rc_failed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	u8 dual_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	u8 seq; /* packet sequence number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	u16 mt2060_if1[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	u16 firmware_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	u16 firmware_checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	u32 eeprom_sum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	struct af9013_platform_data af9013_pdata[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	struct i2c_client *demod_i2c_client[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	u8 af9013_i2c_addr[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	bool usb_ts_if_configured[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	/* for demod callback override */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	int (*set_frontend[2]) (struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	int (*read_status[2]) (struct dvb_frontend *fe, enum fe_status *status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	int (*init[2]) (struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	int (*sleep[2]) (struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	int (*tuner_init[2]) (struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	int (*tuner_sleep[2]) (struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	struct mutex fe_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) enum af9015_remote {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	AF9015_REMOTE_NONE                    = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /* 1 */	AF9015_REMOTE_A_LINK_DTU_M,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	AF9015_REMOTE_MYGICTV_U718,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	AF9015_REMOTE_DIGITTRADE_DVB_T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) /* 5 */	AF9015_REMOTE_AVERMEDIA_KS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #endif