dib3000-common.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "dib3000-common.h"
  2. #ifdef CONFIG_DVB_DIBCOM_DEBUG
  3. static int debug;
  4. module_param(debug, int, 0644);
  5. MODULE_PARM_DESC(debug, "set debugging level (1=info,2=i2c,4=srch (|-able)).");
  6. #endif
  7. #define deb_info(args...) dprintk(0x01,args)
  8. #define deb_i2c(args...) dprintk(0x02,args)
  9. #define deb_srch(args...) dprintk(0x04,args)
  10. int dib3000_read_reg(struct dib3000_state *state, u16 reg)
  11. {
  12. u8 wb[] = { ((reg >> 8) | 0x80) & 0xff, reg & 0xff };
  13. u8 rb[2];
  14. struct i2c_msg msg[] = {
  15. { .addr = state->config.demod_address, .flags = 0, .buf = wb, .len = 2 },
  16. { .addr = state->config.demod_address, .flags = I2C_M_RD, .buf = rb, .len = 2 },
  17. };
  18. if (i2c_transfer(state->i2c, msg, 2) != 2)
  19. deb_i2c("i2c read error\n");
  20. deb_i2c("reading i2c bus (reg: %5d 0x%04x, val: %5d 0x%04x)\n",reg,reg,
  21. (rb[0] << 8) | rb[1],(rb[0] << 8) | rb[1]);
  22. return (rb[0] << 8) | rb[1];
  23. }
  24. int dib3000_write_reg(struct dib3000_state *state, u16 reg, u16 val)
  25. {
  26. u8 b[] = {
  27. (reg >> 8) & 0xff, reg & 0xff,
  28. (val >> 8) & 0xff, val & 0xff,
  29. };
  30. struct i2c_msg msg[] = {
  31. { .addr = state->config.demod_address, .flags = 0, .buf = b, .len = 4 }
  32. };
  33. deb_i2c("writing i2c bus (reg: %5d 0x%04x, val: %5d 0x%04x)\n",reg,reg,val,val);
  34. return i2c_transfer(state->i2c,msg, 1) != 1 ? -EREMOTEIO : 0;
  35. }
  36. int dib3000_search_status(u16 irq,u16 lock)
  37. {
  38. if (irq & 0x02) {
  39. if (lock & 0x01) {
  40. deb_srch("auto search succeeded\n");
  41. return 1; // auto search succeeded
  42. } else {
  43. deb_srch("auto search not successful\n");
  44. return 0; // auto search failed
  45. }
  46. } else if (irq & 0x01) {
  47. deb_srch("auto search failed\n");
  48. return 0; // auto search failed
  49. }
  50. return -1; // try again
  51. }
  52. /* for auto search */
  53. u16 dib3000_seq[2][2][2] = /* fft,gua, inv */
  54. { /* fft */
  55. { /* gua */
  56. { 0, 1 }, /* 0 0 { 0,1 } */
  57. { 3, 9 }, /* 0 1 { 0,1 } */
  58. },
  59. {
  60. { 2, 5 }, /* 1 0 { 0,1 } */
  61. { 6, 11 }, /* 1 1 { 0,1 } */
  62. }
  63. };
  64. MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@desy.de");
  65. MODULE_DESCRIPTION("Common functions for the dib3000mb/dib3000mc dvb frontend drivers");
  66. MODULE_LICENSE("GPL");
  67. EXPORT_SYMBOL(dib3000_seq);
  68. EXPORT_SYMBOL(dib3000_read_reg);
  69. EXPORT_SYMBOL(dib3000_write_reg);
  70. EXPORT_SYMBOL(dib3000_search_status);