aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dm1105
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/dm1105')
-rw-r--r--drivers/media/dvb/dm1105/Kconfig3
-rw-r--r--drivers/media/dvb/dm1105/dm1105.c317
2 files changed, 259 insertions, 61 deletions
diff --git a/drivers/media/dvb/dm1105/Kconfig b/drivers/media/dvb/dm1105/Kconfig
index a6ceb08f1183..f3de0a4d63f2 100644
--- a/drivers/media/dvb/dm1105/Kconfig
+++ b/drivers/media/dvb/dm1105/Kconfig
@@ -1,7 +1,6 @@
1config DVB_DM1105 1config DVB_DM1105
2 tristate "SDMC DM1105 based PCI cards" 2 tristate "SDMC DM1105 based PCI cards"
3 depends on DVB_CORE && PCI && I2C 3 depends on DVB_CORE && PCI && I2C
4 depends on INPUT
5 select DVB_PLL if !DVB_FE_CUSTOMISE 4 select DVB_PLL if !DVB_FE_CUSTOMISE
6 select DVB_STV0299 if !DVB_FE_CUSTOMISE 5 select DVB_STV0299 if !DVB_FE_CUSTOMISE
7 select DVB_STV0288 if !DVB_FE_CUSTOMISE 6 select DVB_STV0288 if !DVB_FE_CUSTOMISE
@@ -9,7 +8,7 @@ config DVB_DM1105
9 select DVB_CX24116 if !DVB_FE_CUSTOMISE 8 select DVB_CX24116 if !DVB_FE_CUSTOMISE
10 select DVB_SI21XX if !DVB_FE_CUSTOMISE 9 select DVB_SI21XX if !DVB_FE_CUSTOMISE
11 select DVB_DS3000 if !DVB_FE_CUSTOMISE 10 select DVB_DS3000 if !DVB_FE_CUSTOMISE
12 depends on VIDEO_IR 11 depends on RC_CORE
13 help 12 help
14 Support for cards based on the SDMC DM1105 PCI chip like 13 Support for cards based on the SDMC DM1105 PCI chip like
15 DvbWorld 2002 14 DvbWorld 2002
diff --git a/drivers/media/dvb/dm1105/dm1105.c b/drivers/media/dvb/dm1105/dm1105.c
index bca07c0bcd01..b2b0c45f32a9 100644
--- a/drivers/media/dvb/dm1105/dm1105.c
+++ b/drivers/media/dvb/dm1105/dm1105.c
@@ -20,15 +20,15 @@
20 */ 20 */
21 21
22#include <linux/i2c.h> 22#include <linux/i2c.h>
23#include <linux/i2c-algo-bit.h>
23#include <linux/init.h> 24#include <linux/init.h>
24#include <linux/kernel.h> 25#include <linux/kernel.h>
25#include <linux/module.h> 26#include <linux/module.h>
26#include <linux/proc_fs.h> 27#include <linux/proc_fs.h>
27#include <linux/pci.h> 28#include <linux/pci.h>
28#include <linux/dma-mapping.h> 29#include <linux/dma-mapping.h>
29#include <linux/input.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <media/ir-core.h> 31#include <media/rc-core.h>
32 32
33#include "demux.h" 33#include "demux.h"
34#include "dmxdev.h" 34#include "dmxdev.h"
@@ -50,11 +50,12 @@
50 50
51#define UNSET (-1U) 51#define UNSET (-1U)
52 52
53#define DM1105_BOARD_NOAUTO UNSET 53#define DM1105_BOARD_NOAUTO UNSET
54#define DM1105_BOARD_UNKNOWN 0 54#define DM1105_BOARD_UNKNOWN 0
55#define DM1105_BOARD_DVBWORLD_2002 1 55#define DM1105_BOARD_DVBWORLD_2002 1
56#define DM1105_BOARD_DVBWORLD_2004 2 56#define DM1105_BOARD_DVBWORLD_2004 2
57#define DM1105_BOARD_AXESS_DM05 3 57#define DM1105_BOARD_AXESS_DM05 3
58#define DM1105_BOARD_UNBRANDED_I2C_ON_GPIO 4
58 59
59/* ----------------------------------------------- */ 60/* ----------------------------------------------- */
60/* 61/*
@@ -158,22 +159,38 @@
158#define DM1105_MAX 0x04 159#define DM1105_MAX 0x04
159 160
160#define DRIVER_NAME "dm1105" 161#define DRIVER_NAME "dm1105"
162#define DM1105_I2C_GPIO_NAME "dm1105-gpio"
161 163
162#define DM1105_DMA_PACKETS 47 164#define DM1105_DMA_PACKETS 47
163#define DM1105_DMA_PACKET_LENGTH (128*4) 165#define DM1105_DMA_PACKET_LENGTH (128*4)
164#define DM1105_DMA_BYTES (128 * 4 * DM1105_DMA_PACKETS) 166#define DM1105_DMA_BYTES (128 * 4 * DM1105_DMA_PACKETS)
165 167
168/* */
169#define GPIO08 (1 << 8)
170#define GPIO13 (1 << 13)
171#define GPIO14 (1 << 14)
172#define GPIO15 (1 << 15)
173#define GPIO16 (1 << 16)
174#define GPIO17 (1 << 17)
175#define GPIO_ALL 0x03ffff
176
166/* GPIO's for LNB power control */ 177/* GPIO's for LNB power control */
167#define DM1105_LNB_MASK 0x00000000 178#define DM1105_LNB_MASK (GPIO_ALL & ~(GPIO14 | GPIO13))
168#define DM1105_LNB_OFF 0x00020000 179#define DM1105_LNB_OFF GPIO17
169#define DM1105_LNB_13V 0x00010100 180#define DM1105_LNB_13V (GPIO16 | GPIO08)
170#define DM1105_LNB_18V 0x00000100 181#define DM1105_LNB_18V GPIO08
171 182
172/* GPIO's for LNB power control for Axess DM05 */ 183/* GPIO's for LNB power control for Axess DM05 */
173#define DM05_LNB_MASK 0x00000000 184#define DM05_LNB_MASK (GPIO_ALL & ~(GPIO14 | GPIO13))
174#define DM05_LNB_OFF 0x00020000/* actually 13v */ 185#define DM05_LNB_OFF GPIO17/* actually 13v */
175#define DM05_LNB_13V 0x00020000 186#define DM05_LNB_13V GPIO17
176#define DM05_LNB_18V 0x00030000 187#define DM05_LNB_18V (GPIO17 | GPIO16)
188
189/* GPIO's for LNB power control for unbranded with I2C on GPIO */
190#define UNBR_LNB_MASK (GPIO17 | GPIO16)
191#define UNBR_LNB_OFF 0
192#define UNBR_LNB_13V GPIO17
193#define UNBR_LNB_18V (GPIO17 | GPIO16)
177 194
178static unsigned int card[] = {[0 ... 3] = UNSET }; 195static unsigned int card[] = {[0 ... 3] = UNSET };
179module_param_array(card, int, NULL, 0444); 196module_param_array(card, int, NULL, 0444);
@@ -188,7 +205,11 @@ static unsigned int dm1105_devcount;
188DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 205DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
189 206
190struct dm1105_board { 207struct dm1105_board {
191 char *name; 208 char *name;
209 struct {
210 u32 mask, off, v13, v18;
211 } lnb;
212 u32 gpio_scl, gpio_sda;
192}; 213};
193 214
194struct dm1105_subid { 215struct dm1105_subid {
@@ -200,15 +221,50 @@ struct dm1105_subid {
200static const struct dm1105_board dm1105_boards[] = { 221static const struct dm1105_board dm1105_boards[] = {
201 [DM1105_BOARD_UNKNOWN] = { 222 [DM1105_BOARD_UNKNOWN] = {
202 .name = "UNKNOWN/GENERIC", 223 .name = "UNKNOWN/GENERIC",
224 .lnb = {
225 .mask = DM1105_LNB_MASK,
226 .off = DM1105_LNB_OFF,
227 .v13 = DM1105_LNB_13V,
228 .v18 = DM1105_LNB_18V,
229 },
203 }, 230 },
204 [DM1105_BOARD_DVBWORLD_2002] = { 231 [DM1105_BOARD_DVBWORLD_2002] = {
205 .name = "DVBWorld PCI 2002", 232 .name = "DVBWorld PCI 2002",
233 .lnb = {
234 .mask = DM1105_LNB_MASK,
235 .off = DM1105_LNB_OFF,
236 .v13 = DM1105_LNB_13V,
237 .v18 = DM1105_LNB_18V,
238 },
206 }, 239 },
207 [DM1105_BOARD_DVBWORLD_2004] = { 240 [DM1105_BOARD_DVBWORLD_2004] = {
208 .name = "DVBWorld PCI 2004", 241 .name = "DVBWorld PCI 2004",
242 .lnb = {
243 .mask = DM1105_LNB_MASK,
244 .off = DM1105_LNB_OFF,
245 .v13 = DM1105_LNB_13V,
246 .v18 = DM1105_LNB_18V,
247 },
209 }, 248 },
210 [DM1105_BOARD_AXESS_DM05] = { 249 [DM1105_BOARD_AXESS_DM05] = {
211 .name = "Axess/EasyTv DM05", 250 .name = "Axess/EasyTv DM05",
251 .lnb = {
252 .mask = DM05_LNB_MASK,
253 .off = DM05_LNB_OFF,
254 .v13 = DM05_LNB_13V,
255 .v18 = DM05_LNB_18V,
256 },
257 },
258 [DM1105_BOARD_UNBRANDED_I2C_ON_GPIO] = {
259 .name = "Unbranded DM1105 with i2c on GPIOs",
260 .lnb = {
261 .mask = UNBR_LNB_MASK,
262 .off = UNBR_LNB_OFF,
263 .v13 = UNBR_LNB_13V,
264 .v18 = UNBR_LNB_18V,
265 },
266 .gpio_scl = GPIO14,
267 .gpio_sda = GPIO13,
212 }, 268 },
213}; 269};
214 270
@@ -266,7 +322,7 @@ static void dm1105_card_list(struct pci_dev *pci)
266 322
267/* infrared remote control */ 323/* infrared remote control */
268struct infrared { 324struct infrared {
269 struct input_dev *input_dev; 325 struct rc_dev *dev;
270 char input_phys[32]; 326 char input_phys[32];
271 struct work_struct work; 327 struct work_struct work;
272 u32 ir_command; 328 u32 ir_command;
@@ -294,6 +350,8 @@ struct dm1105_dev {
294 350
295 /* i2c */ 351 /* i2c */
296 struct i2c_adapter i2c_adap; 352 struct i2c_adapter i2c_adap;
353 struct i2c_adapter i2c_bb_adap;
354 struct i2c_algo_bit_data i2c_bit;
297 355
298 /* irq */ 356 /* irq */
299 struct work_struct work; 357 struct work_struct work;
@@ -329,6 +387,103 @@ struct dm1105_dev {
329#define dm_setl(reg, bit) dm_andorl((reg), (bit), (bit)) 387#define dm_setl(reg, bit) dm_andorl((reg), (bit), (bit))
330#define dm_clearl(reg, bit) dm_andorl((reg), (bit), 0) 388#define dm_clearl(reg, bit) dm_andorl((reg), (bit), 0)
331 389
390/* The chip has 18 GPIOs. In HOST mode GPIO's used as 15 bit address lines,
391 so we can use only 3 GPIO's from GPIO15 to GPIO17.
392 Here I don't check whether HOST is enebled as it is not implemented yet.
393 */
394static void dm1105_gpio_set(struct dm1105_dev *dev, u32 mask)
395{
396 if (mask & 0xfffc0000)
397 printk(KERN_ERR "%s: Only 18 GPIO's are allowed\n", __func__);
398
399 if (mask & 0x0003ffff)
400 dm_setl(DM1105_GPIOVAL, mask & 0x0003ffff);
401
402}
403
404static void dm1105_gpio_clear(struct dm1105_dev *dev, u32 mask)
405{
406 if (mask & 0xfffc0000)
407 printk(KERN_ERR "%s: Only 18 GPIO's are allowed\n", __func__);
408
409 if (mask & 0x0003ffff)
410 dm_clearl(DM1105_GPIOVAL, mask & 0x0003ffff);
411
412}
413
414static void dm1105_gpio_andor(struct dm1105_dev *dev, u32 mask, u32 val)
415{
416 if (mask & 0xfffc0000)
417 printk(KERN_ERR "%s: Only 18 GPIO's are allowed\n", __func__);
418
419 if (mask & 0x0003ffff)
420 dm_andorl(DM1105_GPIOVAL, mask & 0x0003ffff, val);
421
422}
423
424static u32 dm1105_gpio_get(struct dm1105_dev *dev, u32 mask)
425{
426 if (mask & 0xfffc0000)
427 printk(KERN_ERR "%s: Only 18 GPIO's are allowed\n", __func__);
428
429 if (mask & 0x0003ffff)
430 return dm_readl(DM1105_GPIOVAL) & mask & 0x0003ffff;
431
432 return 0;
433}
434
435static void dm1105_gpio_enable(struct dm1105_dev *dev, u32 mask, int asoutput)
436{
437 if (mask & 0xfffc0000)
438 printk(KERN_ERR "%s: Only 18 GPIO's are allowed\n", __func__);
439
440 if ((mask & 0x0003ffff) && asoutput)
441 dm_clearl(DM1105_GPIOCTR, mask & 0x0003ffff);
442 else if ((mask & 0x0003ffff) && !asoutput)
443 dm_setl(DM1105_GPIOCTR, mask & 0x0003ffff);
444
445}
446
447static void dm1105_setline(struct dm1105_dev *dev, u32 line, int state)
448{
449 if (state)
450 dm1105_gpio_enable(dev, line, 0);
451 else {
452 dm1105_gpio_enable(dev, line, 1);
453 dm1105_gpio_clear(dev, line);
454 }
455}
456
457static void dm1105_setsda(void *data, int state)
458{
459 struct dm1105_dev *dev = data;
460
461 dm1105_setline(dev, dm1105_boards[dev->boardnr].gpio_sda, state);
462}
463
464static void dm1105_setscl(void *data, int state)
465{
466 struct dm1105_dev *dev = data;
467
468 dm1105_setline(dev, dm1105_boards[dev->boardnr].gpio_scl, state);
469}
470
471static int dm1105_getsda(void *data)
472{
473 struct dm1105_dev *dev = data;
474
475 return dm1105_gpio_get(dev, dm1105_boards[dev->boardnr].gpio_sda)
476 ? 1 : 0;
477}
478
479static int dm1105_getscl(void *data)
480{
481 struct dm1105_dev *dev = data;
482
483 return dm1105_gpio_get(dev, dm1105_boards[dev->boardnr].gpio_scl)
484 ? 1 : 0;
485}
486
332static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap, 487static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap,
333 struct i2c_msg *msgs, int num) 488 struct i2c_msg *msgs, int num)
334{ 489{
@@ -437,31 +592,20 @@ static inline struct dm1105_dev *frontend_to_dm1105_dev(struct dvb_frontend *fe)
437static int dm1105_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) 592static int dm1105_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
438{ 593{
439 struct dm1105_dev *dev = frontend_to_dm1105_dev(fe); 594 struct dm1105_dev *dev = frontend_to_dm1105_dev(fe);
440 u32 lnb_mask, lnb_13v, lnb_18v, lnb_off;
441 595
442 switch (dev->boardnr) { 596 dm1105_gpio_enable(dev, dm1105_boards[dev->boardnr].lnb.mask, 1);
443 case DM1105_BOARD_AXESS_DM05:
444 lnb_mask = DM05_LNB_MASK;
445 lnb_off = DM05_LNB_OFF;
446 lnb_13v = DM05_LNB_13V;
447 lnb_18v = DM05_LNB_18V;
448 break;
449 case DM1105_BOARD_DVBWORLD_2002:
450 case DM1105_BOARD_DVBWORLD_2004:
451 default:
452 lnb_mask = DM1105_LNB_MASK;
453 lnb_off = DM1105_LNB_OFF;
454 lnb_13v = DM1105_LNB_13V;
455 lnb_18v = DM1105_LNB_18V;
456 }
457
458 dm_writel(DM1105_GPIOCTR, lnb_mask);
459 if (voltage == SEC_VOLTAGE_18) 597 if (voltage == SEC_VOLTAGE_18)
460 dm_writel(DM1105_GPIOVAL, lnb_18v); 598 dm1105_gpio_andor(dev,
599 dm1105_boards[dev->boardnr].lnb.mask,
600 dm1105_boards[dev->boardnr].lnb.v18);
461 else if (voltage == SEC_VOLTAGE_13) 601 else if (voltage == SEC_VOLTAGE_13)
462 dm_writel(DM1105_GPIOVAL, lnb_13v); 602 dm1105_gpio_andor(dev,
603 dm1105_boards[dev->boardnr].lnb.mask,
604 dm1105_boards[dev->boardnr].lnb.v13);
463 else 605 else
464 dm_writel(DM1105_GPIOVAL, lnb_off); 606 dm1105_gpio_andor(dev,
607 dm1105_boards[dev->boardnr].lnb.mask,
608 dm1105_boards[dev->boardnr].lnb.off);
465 609
466 return 0; 610 return 0;
467} 611}
@@ -532,7 +676,7 @@ static void dm1105_emit_key(struct work_struct *work)
532 676
533 data = (ircom >> 8) & 0x7f; 677 data = (ircom >> 8) & 0x7f;
534 678
535 ir_keydown(ir->input_dev, data, 0); 679 rc_keydown(ir->dev, data, 0);
536} 680}
537 681
538/* work handler */ 682/* work handler */
@@ -593,46 +737,47 @@ static irqreturn_t dm1105_irq(int irq, void *dev_id)
593 737
594int __devinit dm1105_ir_init(struct dm1105_dev *dm1105) 738int __devinit dm1105_ir_init(struct dm1105_dev *dm1105)
595{ 739{
596 struct input_dev *input_dev; 740 struct rc_dev *dev;
597 char *ir_codes = RC_MAP_DM1105_NEC;
598 int err = -ENOMEM; 741 int err = -ENOMEM;
599 742
600 input_dev = input_allocate_device(); 743 dev = rc_allocate_device();
601 if (!input_dev) 744 if (!dev)
602 return -ENOMEM; 745 return -ENOMEM;
603 746
604 dm1105->ir.input_dev = input_dev;
605 snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys), 747 snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys),
606 "pci-%s/ir0", pci_name(dm1105->pdev)); 748 "pci-%s/ir0", pci_name(dm1105->pdev));
607 749
608 input_dev->name = "DVB on-card IR receiver"; 750 dev->driver_name = MODULE_NAME;
609 input_dev->phys = dm1105->ir.input_phys; 751 dev->map_name = RC_MAP_DM1105_NEC;
610 input_dev->id.bustype = BUS_PCI; 752 dev->driver_type = RC_DRIVER_SCANCODE;
611 input_dev->id.version = 1; 753 dev->input_name = "DVB on-card IR receiver";
754 dev->input_phys = dm1105->ir.input_phys;
755 dev->input_id.bustype = BUS_PCI;
756 dev->input_id.version = 1;
612 if (dm1105->pdev->subsystem_vendor) { 757 if (dm1105->pdev->subsystem_vendor) {
613 input_dev->id.vendor = dm1105->pdev->subsystem_vendor; 758 dev->input_id.vendor = dm1105->pdev->subsystem_vendor;
614 input_dev->id.product = dm1105->pdev->subsystem_device; 759 dev->input_id.product = dm1105->pdev->subsystem_device;
615 } else { 760 } else {
616 input_dev->id.vendor = dm1105->pdev->vendor; 761 dev->input_id.vendor = dm1105->pdev->vendor;
617 input_dev->id.product = dm1105->pdev->device; 762 dev->input_id.product = dm1105->pdev->device;
618 } 763 }
619 764 dev->dev.parent = &dm1105->pdev->dev;
620 input_dev->dev.parent = &dm1105->pdev->dev;
621 765
622 INIT_WORK(&dm1105->ir.work, dm1105_emit_key); 766 INIT_WORK(&dm1105->ir.work, dm1105_emit_key);
623 767
624 err = ir_input_register(input_dev, ir_codes, NULL, MODULE_NAME); 768 err = rc_register_device(dev);
625 if (err < 0) { 769 if (err < 0) {
626 input_free_device(input_dev); 770 rc_free_device(dev);
627 return err; 771 return err;
628 } 772 }
629 773
774 dm1105->ir.dev = dev;
630 return 0; 775 return 0;
631} 776}
632 777
633void __devexit dm1105_ir_exit(struct dm1105_dev *dm1105) 778void __devexit dm1105_ir_exit(struct dm1105_dev *dm1105)
634{ 779{
635 ir_input_unregister(dm1105->ir.input_dev); 780 rc_unregister_device(dm1105->ir.dev);
636} 781}
637 782
638static int __devinit dm1105_hw_init(struct dm1105_dev *dev) 783static int __devinit dm1105_hw_init(struct dm1105_dev *dev)
@@ -708,6 +853,38 @@ static int __devinit frontend_init(struct dm1105_dev *dev)
708 int ret; 853 int ret;
709 854
710 switch (dev->boardnr) { 855 switch (dev->boardnr) {
856 case DM1105_BOARD_UNBRANDED_I2C_ON_GPIO:
857 dm1105_gpio_enable(dev, GPIO15, 1);
858 dm1105_gpio_clear(dev, GPIO15);
859 msleep(100);
860 dm1105_gpio_set(dev, GPIO15);
861 msleep(200);
862 dev->fe = dvb_attach(
863 stv0299_attach, &sharp_z0194a_config,
864 &dev->i2c_bb_adap);
865 if (dev->fe) {
866 dev->fe->ops.set_voltage = dm1105_set_voltage;
867 dvb_attach(dvb_pll_attach, dev->fe, 0x60,
868 &dev->i2c_bb_adap, DVB_PLL_OPERA1);
869 break;
870 }
871
872 dev->fe = dvb_attach(
873 stv0288_attach, &earda_config,
874 &dev->i2c_bb_adap);
875 if (dev->fe) {
876 dev->fe->ops.set_voltage = dm1105_set_voltage;
877 dvb_attach(stb6000_attach, dev->fe, 0x61,
878 &dev->i2c_bb_adap);
879 break;
880 }
881
882 dev->fe = dvb_attach(
883 si21xx_attach, &serit_config,
884 &dev->i2c_bb_adap);
885 if (dev->fe)
886 dev->fe->ops.set_voltage = dm1105_set_voltage;
887 break;
711 case DM1105_BOARD_DVBWORLD_2004: 888 case DM1105_BOARD_DVBWORLD_2004:
712 dev->fe = dvb_attach( 889 dev->fe = dvb_attach(
713 cx24116_attach, &serit_sp2633_config, 890 cx24116_attach, &serit_sp2633_config,
@@ -862,7 +1039,6 @@ static int __devinit dm1105_probe(struct pci_dev *pdev,
862 i2c_set_adapdata(&dev->i2c_adap, dev); 1039 i2c_set_adapdata(&dev->i2c_adap, dev);
863 strcpy(dev->i2c_adap.name, DRIVER_NAME); 1040 strcpy(dev->i2c_adap.name, DRIVER_NAME);
864 dev->i2c_adap.owner = THIS_MODULE; 1041 dev->i2c_adap.owner = THIS_MODULE;
865 dev->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
866 dev->i2c_adap.dev.parent = &pdev->dev; 1042 dev->i2c_adap.dev.parent = &pdev->dev;
867 dev->i2c_adap.algo = &dm1105_algo; 1043 dev->i2c_adap.algo = &dm1105_algo;
868 dev->i2c_adap.algo_data = dev; 1044 dev->i2c_adap.algo_data = dev;
@@ -871,11 +1047,32 @@ static int __devinit dm1105_probe(struct pci_dev *pdev,
871 if (ret < 0) 1047 if (ret < 0)
872 goto err_dm1105_hw_exit; 1048 goto err_dm1105_hw_exit;
873 1049
1050 i2c_set_adapdata(&dev->i2c_bb_adap, dev);
1051 strcpy(dev->i2c_bb_adap.name, DM1105_I2C_GPIO_NAME);
1052 dev->i2c_bb_adap.owner = THIS_MODULE;
1053 dev->i2c_bb_adap.dev.parent = &pdev->dev;
1054 dev->i2c_bb_adap.algo_data = &dev->i2c_bit;
1055 dev->i2c_bit.data = dev;
1056 dev->i2c_bit.setsda = dm1105_setsda;
1057 dev->i2c_bit.setscl = dm1105_setscl;
1058 dev->i2c_bit.getsda = dm1105_getsda;
1059 dev->i2c_bit.getscl = dm1105_getscl;
1060 dev->i2c_bit.udelay = 10;
1061 dev->i2c_bit.timeout = 10;
1062
1063 /* Raise SCL and SDA */
1064 dm1105_setsda(dev, 1);
1065 dm1105_setscl(dev, 1);
1066
1067 ret = i2c_bit_add_bus(&dev->i2c_bb_adap);
1068 if (ret < 0)
1069 goto err_i2c_del_adapter;
1070
874 /* dvb */ 1071 /* dvb */
875 ret = dvb_register_adapter(&dev->dvb_adapter, DRIVER_NAME, 1072 ret = dvb_register_adapter(&dev->dvb_adapter, DRIVER_NAME,
876 THIS_MODULE, &pdev->dev, adapter_nr); 1073 THIS_MODULE, &pdev->dev, adapter_nr);
877 if (ret < 0) 1074 if (ret < 0)
878 goto err_i2c_del_adapter; 1075 goto err_i2c_del_adapters;
879 1076
880 dvb_adapter = &dev->dvb_adapter; 1077 dvb_adapter = &dev->dvb_adapter;
881 1078
@@ -953,6 +1150,8 @@ err_dvb_dmx_release:
953 dvb_dmx_release(dvbdemux); 1150 dvb_dmx_release(dvbdemux);
954err_dvb_unregister_adapter: 1151err_dvb_unregister_adapter:
955 dvb_unregister_adapter(dvb_adapter); 1152 dvb_unregister_adapter(dvb_adapter);
1153err_i2c_del_adapters:
1154 i2c_del_adapter(&dev->i2c_bb_adap);
956err_i2c_del_adapter: 1155err_i2c_del_adapter:
957 i2c_del_adapter(&dev->i2c_adap); 1156 i2c_del_adapter(&dev->i2c_adap);
958err_dm1105_hw_exit: 1157err_dm1105_hw_exit: