tda10071_priv.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * NXP TDA10071 + Conexant CX24118A DVB-S/S2 demodulator + tuner driver
  3. *
  4. * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program; if not, write to the Free Software Foundation, Inc.,
  18. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  19. */
  20. #ifndef TDA10071_PRIV
  21. #define TDA10071_PRIV
  22. #include "dvb_frontend.h"
  23. #include "tda10071.h"
  24. #include <linux/firmware.h>
  25. #include <linux/regmap.h>
  26. struct tda10071_dev {
  27. struct dvb_frontend fe;
  28. struct i2c_client *client;
  29. struct regmap *regmap;
  30. struct mutex cmd_execute_mutex;
  31. u32 clk;
  32. u16 i2c_wr_max;
  33. u8 ts_mode;
  34. bool spec_inv;
  35. u8 pll_multiplier;
  36. u8 tuner_i2c_addr;
  37. u8 meas_count;
  38. u32 dvbv3_ber;
  39. enum fe_status fe_status;
  40. enum fe_delivery_system delivery_system;
  41. bool warm; /* FW running */
  42. u64 post_bit_error;
  43. u64 block_error;
  44. };
  45. static struct tda10071_modcod {
  46. enum fe_delivery_system delivery_system;
  47. enum fe_modulation modulation;
  48. enum fe_code_rate fec;
  49. u8 val;
  50. } TDA10071_MODCOD[] = {
  51. /* NBC-QPSK */
  52. { SYS_DVBS2, QPSK, FEC_AUTO, 0x00 },
  53. { SYS_DVBS2, QPSK, FEC_1_2, 0x04 },
  54. { SYS_DVBS2, QPSK, FEC_3_5, 0x05 },
  55. { SYS_DVBS2, QPSK, FEC_2_3, 0x06 },
  56. { SYS_DVBS2, QPSK, FEC_3_4, 0x07 },
  57. { SYS_DVBS2, QPSK, FEC_4_5, 0x08 },
  58. { SYS_DVBS2, QPSK, FEC_5_6, 0x09 },
  59. { SYS_DVBS2, QPSK, FEC_8_9, 0x0a },
  60. { SYS_DVBS2, QPSK, FEC_9_10, 0x0b },
  61. /* 8PSK */
  62. { SYS_DVBS2, PSK_8, FEC_AUTO, 0x00 },
  63. { SYS_DVBS2, PSK_8, FEC_3_5, 0x0c },
  64. { SYS_DVBS2, PSK_8, FEC_2_3, 0x0d },
  65. { SYS_DVBS2, PSK_8, FEC_3_4, 0x0e },
  66. { SYS_DVBS2, PSK_8, FEC_5_6, 0x0f },
  67. { SYS_DVBS2, PSK_8, FEC_8_9, 0x10 },
  68. { SYS_DVBS2, PSK_8, FEC_9_10, 0x11 },
  69. /* QPSK */
  70. { SYS_DVBS, QPSK, FEC_AUTO, 0x2d },
  71. { SYS_DVBS, QPSK, FEC_1_2, 0x2e },
  72. { SYS_DVBS, QPSK, FEC_2_3, 0x2f },
  73. { SYS_DVBS, QPSK, FEC_3_4, 0x30 },
  74. { SYS_DVBS, QPSK, FEC_5_6, 0x31 },
  75. { SYS_DVBS, QPSK, FEC_7_8, 0x32 },
  76. };
  77. struct tda10071_reg_val_mask {
  78. u8 reg;
  79. u8 val;
  80. u8 mask;
  81. };
  82. /* firmware filename */
  83. #define TDA10071_FIRMWARE "dvb-fe-tda10071.fw"
  84. /* firmware commands */
  85. #define CMD_DEMOD_INIT 0x10
  86. #define CMD_CHANGE_CHANNEL 0x11
  87. #define CMD_MPEG_CONFIG 0x13
  88. #define CMD_TUNER_INIT 0x15
  89. #define CMD_GET_AGCACC 0x1a
  90. #define CMD_LNB_CONFIG 0x20
  91. #define CMD_LNB_SEND_DISEQC 0x21
  92. #define CMD_LNB_SET_DC_LEVEL 0x22
  93. #define CMD_LNB_PCB_CONFIG 0x23
  94. #define CMD_LNB_SEND_TONEBURST 0x24
  95. #define CMD_LNB_UPDATE_REPLY 0x25
  96. #define CMD_GET_FW_VERSION 0x35
  97. #define CMD_SET_SLEEP_MODE 0x36
  98. #define CMD_BER_CONTROL 0x3e
  99. #define CMD_BER_UPDATE_COUNTERS 0x3f
  100. /* firmware command struct */
  101. #define TDA10071_ARGLEN 30
  102. struct tda10071_cmd {
  103. u8 args[TDA10071_ARGLEN];
  104. u8 len;
  105. };
  106. #endif /* TDA10071_PRIV */