Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (6785): tda8290: remove dependency on struct tuner

- remove dependency of tda8290 module on struct tuner
- move tuner_foo printk macros from tuner-driver.h into tuner-core.c
- clean up #includes of tuner-i2c.h / tuner-driver.h

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Michael Krufky and committed by
Mauro Carvalho Chehab
ab166050 fa746aee

+109 -93
+50 -53
drivers/media/video/tda8290.c
··· 23 23 #include <linux/i2c.h> 24 24 #include <linux/delay.h> 25 25 #include <linux/videodev.h> 26 + #include "tuner-driver.h" 27 + #include "tuner-i2c.h" 26 28 #include "tda8290.h" 27 29 #include "tda827x.h" 28 30 #include "tda18271.h" 29 31 30 - static int tuner_debug; 31 - module_param_named(debug, tuner_debug, int, 0644); 32 + static int debug; 33 + module_param(debug, int, 0644); 32 34 MODULE_PARM_DESC(debug, "enable verbose debug messages"); 33 35 34 36 #define PREFIX "tda8290" ··· 52 50 #define TDA18271 16 53 51 54 52 struct tda827x_config cfg; 55 - 56 - struct tuner *t; 57 53 }; 58 54 59 55 /*---------------------------------------------------------------------*/ ··· 114 114 struct analog_parameters *params) 115 115 { 116 116 struct tda8290_priv *priv = fe->analog_demod_priv; 117 - struct tuner *t = priv->t; 118 117 char* mode; 119 118 120 119 if (params->std & V4L2_STD_MN) { ··· 149 150 struct analog_parameters *params) 150 151 { 151 152 struct tda8290_priv *priv = fe->analog_demod_priv; 152 - struct tuner *t = priv->t; 153 153 154 154 unsigned char soft_reset[] = { 0x00, 0x00 }; 155 155 unsigned char easy_mode[] = { 0x01, priv->tda8290_easy_mode }; ··· 174 176 175 177 set_audio(fe, params); 176 178 177 - tuner_dbg("tda827xa config is 0x%02x\n", t->config); 179 + if (priv->cfg.config) 180 + tuner_dbg("tda827xa config is 0x%02x\n", *priv->cfg.config); 178 181 tuner_i2c_xfer_send(&priv->i2c_props, easy_mode, 2); 179 182 tuner_i2c_xfer_send(&priv->i2c_props, agc_out_on, 2); 180 183 tuner_i2c_xfer_send(&priv->i2c_props, soft_reset, 2); ··· 361 362 struct analog_parameters *params) 362 363 { 363 364 struct tda8290_priv *priv = fe->analog_demod_priv; 364 - struct tuner *t = priv->t; 365 365 366 366 unsigned char blanking_mode[] = { 0x1d, 0x00 }; 367 367 ··· 440 442 static void tda8290_init_if(struct dvb_frontend *fe) 441 443 { 442 444 struct tda8290_priv *priv = fe->analog_demod_priv; 443 - struct tuner *t = priv->t; 444 445 445 446 unsigned char set_VS[] = { 0x30, 0x6F }; 446 447 unsigned char set_GP00_CF[] = { 0x20, 0x01 }; 447 448 unsigned char set_GP01_CF[] = { 0x20, 0x0B }; 448 449 449 - if ((t->config == 1) || (t->config == 2)) 450 + if ((priv->cfg.config) && 451 + ((*priv->cfg.config == 1) || (*priv->cfg.config == 2))) 450 452 tuner_i2c_xfer_send(&priv->i2c_props, set_GP00_CF, 2); 451 453 else 452 454 tuner_i2c_xfer_send(&priv->i2c_props, set_GP01_CF, 2); ··· 514 516 { 515 517 struct tda8290_priv *priv = fe->analog_demod_priv; 516 518 struct analog_tuner_ops *ops = fe->ops.analog_demod_ops; 517 - struct tuner *t = priv->t; 518 519 int i, ret, tuners_found; 519 520 u32 tuner_addrs; 520 521 u8 data; ··· 592 595 593 596 ops->i2c_gate_ctrl(fe, 0); 594 597 595 - switch (priv->ver) { 596 - case TDA8290 | TDA8275: 597 - strlcpy(t->i2c->name, "tda8290+75", sizeof(t->i2c->name)); 598 - break; 599 - case TDA8295 | TDA8275: 600 - strlcpy(t->i2c->name, "tda8295+75", sizeof(t->i2c->name)); 601 - break; 602 - case TDA8290 | TDA8275A: 603 - strlcpy(t->i2c->name, "tda8290+75a", sizeof(t->i2c->name)); 604 - break; 605 - case TDA8295 | TDA8275A: 606 - strlcpy(t->i2c->name, "tda8295+75a", sizeof(t->i2c->name)); 607 - break; 608 - case TDA8290 | TDA18271: 609 - strlcpy(t->i2c->name, "tda8290+18271", sizeof(t->i2c->name)); 610 - break; 611 - case TDA8295 | TDA18271: 612 - strlcpy(t->i2c->name, "tda8295+18271", sizeof(t->i2c->name)); 613 - break; 614 - default: 615 - return -EINVAL; 616 - } 617 - 618 598 return 0; 619 599 } 620 600 ··· 605 631 tuner_i2c_xfer_recv(i2c_props, &tda8290_id[1], 1); 606 632 607 633 if (tda8290_id[1] == TDA8290_ID) { 608 - if (tuner_debug) 634 + if (debug) 609 635 printk(KERN_DEBUG "%s: tda8290 detected @ %d-%04x\n", 610 636 __FUNCTION__, i2c_adapter_id(i2c_props->adap), 611 637 i2c_props->addr); ··· 625 651 tuner_i2c_xfer_recv(i2c_props, &tda8295_id[1], 1); 626 652 627 653 if (tda8295_id[1] == TDA8295_ID) { 628 - if (tuner_debug) 654 + if (debug) 629 655 printk(KERN_DEBUG "%s: tda8295 detected @ %d-%04x\n", 630 656 __FUNCTION__, i2c_adapter_id(i2c_props->adap), 631 657 i2c_props->addr); ··· 651 677 .i2c_gate_ctrl = tda8295_i2c_bridge, 652 678 }; 653 679 654 - int tda829x_attach(struct tuner *t) 680 + struct dvb_frontend *tda829x_attach(struct dvb_frontend *fe, 681 + struct i2c_adapter *i2c_adap, u8 i2c_addr, 682 + struct tda829x_config *cfg) 655 683 { 656 - struct dvb_frontend *fe = &t->fe; 657 684 struct tda8290_priv *priv = NULL; 685 + char *name; 658 686 659 687 priv = kzalloc(sizeof(struct tda8290_priv), GFP_KERNEL); 660 688 if (priv == NULL) 661 - return -ENOMEM; 689 + return NULL; 662 690 fe->analog_demod_priv = priv; 663 691 664 - priv->i2c_props.addr = t->i2c->addr; 665 - priv->i2c_props.adap = t->i2c->adapter; 666 - priv->cfg.config = &t->config; 667 - priv->cfg.tuner_callback = t->tuner_callback; 668 - priv->t = t; 692 + priv->i2c_props.addr = i2c_addr; 693 + priv->i2c_props.adap = i2c_adap; 694 + if (cfg) { 695 + priv->cfg.config = cfg->lna_cfg; 696 + priv->cfg.tuner_callback = cfg->tuner_callback; 697 + } 669 698 670 699 if (tda8290_probe(&priv->i2c_props) == 0) { 671 700 priv->ver = TDA8290; ··· 683 706 if (tda829x_find_tuner(fe) < 0) 684 707 goto fail; 685 708 709 + switch (priv->ver) { 710 + case TDA8290 | TDA8275: 711 + name = "tda8290+75"; 712 + break; 713 + case TDA8295 | TDA8275: 714 + name = "tda8295+75"; 715 + break; 716 + case TDA8290 | TDA8275A: 717 + name = "tda8290+75a"; 718 + break; 719 + case TDA8295 | TDA8275A: 720 + name = "tda8295+75a"; 721 + break; 722 + case TDA8290 | TDA18271: 723 + name = "tda8290+18271"; 724 + break; 725 + case TDA8295 | TDA18271: 726 + name = "tda8295+18271"; 727 + break; 728 + default: 729 + goto fail; 730 + } 731 + tuner_info("type set to %s\n", name); 732 + 686 733 if (priv->ver & TDA8290) { 687 734 tda8290_init_tuner(fe); 688 735 tda8290_init_if(fe); 689 736 } else if (priv->ver & TDA8295) 690 737 tda8295_init_if(fe); 691 738 692 - tuner_info("type set to %s\n", t->i2c->name); 693 - 694 - t->mode = V4L2_TUNER_ANALOG_TV; 695 - 696 - return 0; 739 + return fe; 697 740 698 741 fail: 699 742 tda829x_release(fe); 700 743 fe->ops.analog_demod_ops = NULL; 701 - return -EINVAL; 744 + return NULL; 702 745 } 703 746 EXPORT_SYMBOL_GPL(tda829x_attach); 704 747 705 - int tda829x_probe(struct tuner *t) 748 + int tda829x_probe(struct i2c_adapter *i2c_adap, u8 i2c_addr) 706 749 { 707 750 struct tuner_i2c_props i2c_props = { 708 - .adap = t->i2c->adapter, 709 - .addr = t->i2c->addr 751 + .adap = i2c_adap, 752 + .addr = i2c_addr, 710 753 }; 711 754 712 755 unsigned char soft_reset[] = { 0x00, 0x00 };
+18 -6
drivers/media/video/tda8290.h
··· 18 18 #define __TDA8290_H__ 19 19 20 20 #include <linux/i2c.h> 21 - #include "tuner-driver.h" 21 + #include "dvb_frontend.h" 22 + 23 + struct tda829x_config 24 + { 25 + unsigned int *lna_cfg; 26 + int (*tuner_callback) (void *dev, int command, int arg); 27 + }; 22 28 23 29 #if defined(CONFIG_TUNER_TDA8290) || (defined(CONFIG_TUNER_TDA8290_MODULE) && defined(MODULE)) 24 - extern int tda829x_probe(struct tuner *t); 30 + extern int tda829x_probe(struct i2c_adapter *i2c_adap, u8 i2c_addr); 25 31 26 - extern int tda829x_attach(struct tuner *t); 32 + extern struct dvb_frontend *tda829x_attach(struct dvb_frontend *fe, 33 + struct i2c_adapter *i2c_adap, 34 + u8 i2c_addr, 35 + struct tda829x_config *cfg); 27 36 #else 28 - static inline int tda829x_probe(struct tuner *t) 37 + static inline int tda829x_probe(struct i2c_adapter *i2c_adap, u8 i2c_addr) 29 38 { 30 39 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__); 31 40 return -EINVAL; 32 41 } 33 42 34 - static inline int tda829x_attach(struct tuner *t) 43 + static inline struct dvb_frontend *tda829x_attach(struct dvb_frontend *fe, 44 + struct i2c_adapter *i2c_adap, 45 + u8 i2c_addr, 46 + struct tda829x_config *cfg) 35 47 { 36 48 printk(KERN_INFO "%s: not probed - driver disabled by Kconfig\n", 37 49 __FUNCTION__); 38 - return -EINVAL; 50 + return NULL; 39 51 } 40 52 #endif 41 53
+1
drivers/media/video/tda9887.c
··· 9 9 #include <linux/videodev.h> 10 10 #include <media/v4l2-common.h> 11 11 #include <media/tuner.h> 12 + #include "tuner-i2c.h" 12 13 #include "tda9887.h" 13 14 14 15
+40 -3
drivers/media/video/tuner-core.c
··· 52 52 static unsigned int show_i2c = 0; 53 53 54 54 /* insmod options used at runtime => read/write */ 55 - int tuner_debug = 0; 55 + static int tuner_debug; 56 + 57 + #define tuner_warn(fmt, arg...) do { \ 58 + printk(KERN_WARNING "%s %d-%04x: " fmt, PREFIX, \ 59 + i2c_adapter_id(t->i2c->adapter), \ 60 + t->i2c->addr, ##arg); \ 61 + } while (0) 62 + 63 + #define tuner_info(fmt, arg...) do { \ 64 + printk(KERN_INFO "%s %d-%04x: " fmt, PREFIX, \ 65 + i2c_adapter_id(t->i2c->adapter), \ 66 + t->i2c->addr, ##arg); \ 67 + } while (0) 68 + 69 + #define tuner_err(fmt, arg...) do { \ 70 + printk(KERN_ERR "%s %d-%04x: " fmt, PREFIX, \ 71 + i2c_adapter_id(t->i2c->adapter), \ 72 + t->i2c->addr, ##arg); \ 73 + } while (0) 74 + 75 + #define tuner_dbg(fmt, arg...) do { \ 76 + if (tuner_debug) \ 77 + printk(KERN_DEBUG "%s %d-%04x: " fmt, PREFIX, \ 78 + i2c_adapter_id(t->i2c->adapter), \ 79 + t->i2c->addr, ##arg); \ 80 + } while (0) 81 + 82 + /* ------------------------------------------------------------------------ */ 56 83 57 84 static unsigned int tv_range[2] = { 44, 958 }; 58 85 static unsigned int radio_range[2] = { 65, 108 }; ··· 288 261 simple_tuner_attach(&t->fe, t->i2c->adapter, t->i2c->addr, &cfg); 289 262 } 290 263 264 + static void attach_tda829x(struct tuner *t) 265 + { 266 + struct tda829x_config cfg = { 267 + .lna_cfg = &t->config, 268 + .tuner_callback = t->tuner_callback, 269 + }; 270 + tda829x_attach(&t->fe, t->i2c->adapter, t->i2c->addr, &cfg); 271 + } 272 + 291 273 static void set_type(struct i2c_client *c, unsigned int type, 292 274 unsigned int new_mode_mask, unsigned int new_config, 293 275 int (*tuner_callback) (void *dev, int command,int arg)) ··· 339 303 break; 340 304 case TUNER_PHILIPS_TDA8290: 341 305 { 342 - tda829x_attach(t); 306 + attach_tda829x(t); 343 307 break; 344 308 } 345 309 case TUNER_TEA5767: ··· 1081 1045 case 0x4b: 1082 1046 /* If chip is not tda8290, don't register. 1083 1047 since it can be tda9887*/ 1084 - if (tda829x_probe(t) == 0) { 1048 + if (tda829x_probe(t->i2c->adapter, 1049 + t->i2c->addr) == 0) { 1085 1050 tuner_dbg("tda829x detected\n"); 1086 1051 } else { 1087 1052 /* Default is being tda9887 */
-27
drivers/media/video/tuner-driver.h
··· 24 24 25 25 #include <linux/videodev2.h> 26 26 #include <linux/i2c.h> 27 - #include "tuner-i2c.h" 28 27 #include "dvb_frontend.h" 29 28 30 29 extern unsigned const int tuner_count; 31 - 32 - struct tuner; 33 30 34 31 struct analog_tuner_ops { 35 32 void (*set_params)(struct dvb_frontend *fe, ··· 65 68 unsigned int config; 66 69 int (*tuner_callback) (void *dev, int command,int arg); 67 70 }; 68 - 69 - /* ------------------------------------------------------------------------ */ 70 - 71 - #define tuner_warn(fmt, arg...) do { \ 72 - printk(KERN_WARNING "%s %d-%04x: " fmt, PREFIX, \ 73 - i2c_adapter_id(t->i2c->adapter), t->i2c->addr, ##arg); \ 74 - } while (0) 75 - 76 - #define tuner_info(fmt, arg...) do { \ 77 - printk(KERN_INFO "%s %d-%04x: " fmt, PREFIX, \ 78 - i2c_adapter_id(t->i2c->adapter), t->i2c->addr , ##arg); \ 79 - } while (0) 80 - 81 - #define tuner_err(fmt, arg...) do { \ 82 - printk(KERN_ERR "%s %d-%04x: " fmt, PREFIX, \ 83 - i2c_adapter_id(t->i2c->adapter), t->i2c->addr , ##arg); \ 84 - } while (0) 85 - 86 - #define tuner_dbg(fmt, arg...) do { \ 87 - extern int tuner_debug; \ 88 - if (tuner_debug) \ 89 - printk(KERN_DEBUG "%s %d-%04x: " fmt, PREFIX, \ 90 - i2c_adapter_id(t->i2c->adapter), t->i2c->addr , ##arg); \ 91 - } while (0) 92 71 93 72 #endif /* __TUNER_DRIVER_H__ */
-2
drivers/media/video/tuner-i2c.h
··· 59 59 return (ret == 2) ? ilen : ret; 60 60 } 61 61 62 - #ifndef __TUNER_DRIVER_H__ 63 62 #define tuner_warn(fmt, arg...) do { \ 64 63 printk(KERN_WARNING "%s %d-%04x: " fmt, PREFIX, \ 65 64 i2c_adapter_id(priv->i2c_props.adap), \ ··· 83 84 i2c_adapter_id(priv->i2c_props.adap), \ 84 85 priv->i2c_props.addr , ##arg); \ 85 86 } while (0) 86 - #endif /* __TUNER_DRIVER_H__ */ 87 87 88 88 #endif /* __TUNER_I2C_H__ */
-2
include/media/tuner.h
··· 24 24 25 25 #include <linux/videodev2.h> 26 26 27 - extern int tuner_debug; 28 - 29 27 #define ADDR_UNSET (255) 30 28 31 29 #define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */