diff options
| author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-11-29 06:19:59 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-12-05 15:42:21 -0500 |
| commit | 055cd55601f948675006ca90362fc2bfaae90a86 (patch) | |
| tree | a878c55c30b0ae30334f3523d8dd67940d32a7f3 | |
| parent | 0278155c84af42d78785731263b69fb49f945ea7 (diff) | |
V4L/DVB (13537): ir: Prepare the code for dynamic keycode table allocation
Currently, the IR table is initialized by calling ir_input_init(). However,
this function doesn't return any error code, nor has a function to be called
when de-initializing the IR's.
Change the return argment to integer and make sure that each driver will
handle the error code. Also adds a function to free any resources that may
be allocating there: ir_input_free().
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
| -rw-r--r-- | drivers/media/common/ir-functions.c | 12 | ||||
| -rw-r--r-- | drivers/media/dvb/dm1105/dm1105.c | 10 | ||||
| -rw-r--r-- | drivers/media/dvb/ttpci/budget-ci.c | 14 | ||||
| -rw-r--r-- | drivers/media/video/bt8xx/bttv-input.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/cx231xx/cx231xx-input.c | 8 | ||||
| -rw-r--r-- | drivers/media/video/cx23885/cx23885-input.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/cx88/cx88-input.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/em28xx/em28xx-input.c | 8 | ||||
| -rw-r--r-- | drivers/media/video/ir-kbd-i2c.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/saa7134/saa7134-input.c | 7 | ||||
| -rw-r--r-- | include/media/ir-common.h | 3 |
11 files changed, 76 insertions, 14 deletions
diff --git a/drivers/media/common/ir-functions.c b/drivers/media/common/ir-functions.c index 29885c2893d2..b31bd27da374 100644 --- a/drivers/media/common/ir-functions.c +++ b/drivers/media/common/ir-functions.c | |||
| @@ -54,11 +54,13 @@ static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir) | |||
| 54 | 54 | ||
| 55 | /* -------------------------------------------------------------------------- */ | 55 | /* -------------------------------------------------------------------------- */ |
| 56 | 56 | ||
| 57 | void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, | 57 | int ir_input_init(struct input_dev *dev, struct ir_input_state *ir, |
| 58 | int ir_type, struct ir_scancode_table *ir_codes) | 58 | int ir_type, struct ir_scancode_table *ir_codes) |
| 59 | { | 59 | { |
| 60 | ir->ir_type = ir_type; | 60 | ir->ir_type = ir_type; |
| 61 | 61 | ||
| 62 | /* FIXME: Add the proper code to dynamically allocate IR table */ | ||
| 63 | |||
| 62 | ir_set_keycode_table(dev, ir_codes); | 64 | ir_set_keycode_table(dev, ir_codes); |
| 63 | 65 | ||
| 64 | clear_bit(0, dev->keybit); | 66 | clear_bit(0, dev->keybit); |
| @@ -66,9 +68,17 @@ void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, | |||
| 66 | set_bit(EV_KEY, dev->evbit); | 68 | set_bit(EV_KEY, dev->evbit); |
| 67 | if (repeat) | 69 | if (repeat) |
| 68 | set_bit(EV_REP, dev->evbit); | 70 | set_bit(EV_REP, dev->evbit); |
| 71 | |||
| 72 | return 0; | ||
| 69 | } | 73 | } |
| 70 | EXPORT_SYMBOL_GPL(ir_input_init); | 74 | EXPORT_SYMBOL_GPL(ir_input_init); |
| 71 | 75 | ||
| 76 | void ir_input_free(struct input_dev *input_dev) | ||
| 77 | { | ||
| 78 | /* FIXME: Add the proper code to free allocated resources */ | ||
| 79 | } | ||
| 80 | EXPORT_SYMBOL_GPL(ir_input_free); | ||
| 81 | |||
| 72 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir) | 82 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir) |
| 73 | { | 83 | { |
| 74 | if (ir->keypressed) { | 84 | if (ir->keypressed) { |
diff --git a/drivers/media/dvb/dm1105/dm1105.c b/drivers/media/dvb/dm1105/dm1105.c index 4c28632f94c4..53e3f2a7d31a 100644 --- a/drivers/media/dvb/dm1105/dm1105.c +++ b/drivers/media/dvb/dm1105/dm1105.c | |||
| @@ -589,7 +589,12 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105) | |||
| 589 | snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys), | 589 | snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys), |
| 590 | "pci-%s/ir0", pci_name(dm1105->pdev)); | 590 | "pci-%s/ir0", pci_name(dm1105->pdev)); |
| 591 | 591 | ||
| 592 | ir_input_init(input_dev, &dm1105->ir.ir, ir_type, ir_codes); | 592 | err = ir_input_init(input_dev, &dm1105->ir.ir, ir_type, ir_codes); |
| 593 | if (err < 0) { | ||
| 594 | input_free_device(input_dev); | ||
| 595 | return err; | ||
| 596 | } | ||
| 597 | |||
| 593 | input_dev->name = "DVB on-card IR receiver"; | 598 | input_dev->name = "DVB on-card IR receiver"; |
| 594 | input_dev->phys = dm1105->ir.input_phys; | 599 | input_dev->phys = dm1105->ir.input_phys; |
| 595 | input_dev->id.bustype = BUS_PCI; | 600 | input_dev->id.bustype = BUS_PCI; |
| @@ -608,6 +613,7 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105) | |||
| 608 | 613 | ||
| 609 | err = input_register_device(input_dev); | 614 | err = input_register_device(input_dev); |
| 610 | if (err) { | 615 | if (err) { |
| 616 | ir_input_free(input_dev); | ||
| 611 | input_free_device(input_dev); | 617 | input_free_device(input_dev); |
| 612 | return err; | 618 | return err; |
| 613 | } | 619 | } |
| @@ -617,8 +623,8 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105) | |||
| 617 | 623 | ||
| 618 | void __devexit dm1105_ir_exit(struct dm1105dvb *dm1105) | 624 | void __devexit dm1105_ir_exit(struct dm1105dvb *dm1105) |
| 619 | { | 625 | { |
| 626 | ir_input_free(dm1105->ir.input_dev); | ||
| 620 | input_unregister_device(dm1105->ir.input_dev); | 627 | input_unregister_device(dm1105->ir.input_dev); |
| 621 | |||
| 622 | } | 628 | } |
| 623 | 629 | ||
| 624 | static int __devinit dm1105dvb_hw_init(struct dm1105dvb *dm1105dvb) | 630 | static int __devinit dm1105dvb_hw_init(struct dm1105dvb *dm1105dvb) |
diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c index adc4b954e5ad..7d193ebc0aea 100644 --- a/drivers/media/dvb/ttpci/budget-ci.c +++ b/drivers/media/dvb/ttpci/budget-ci.c | |||
| @@ -224,8 +224,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci) | |||
| 224 | case 0x1011: | 224 | case 0x1011: |
| 225 | case 0x1012: | 225 | case 0x1012: |
| 226 | /* The hauppauge keymap is a superset of these remotes */ | 226 | /* The hauppauge keymap is a superset of these remotes */ |
| 227 | ir_input_init(input_dev, &budget_ci->ir.state, | 227 | error = ir_input_init(input_dev, &budget_ci->ir.state, |
| 228 | IR_TYPE_RC5, &ir_codes_hauppauge_new_table); | 228 | IR_TYPE_RC5, &ir_codes_hauppauge_new_table); |
| 229 | if (error < 0) | ||
| 230 | goto out2; | ||
| 229 | 231 | ||
| 230 | if (rc5_device < 0) | 232 | if (rc5_device < 0) |
| 231 | budget_ci->ir.rc5_device = 0x1f; | 233 | budget_ci->ir.rc5_device = 0x1f; |
| @@ -236,8 +238,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci) | |||
| 236 | case 0x1017: | 238 | case 0x1017: |
| 237 | case 0x101a: | 239 | case 0x101a: |
| 238 | /* for the Technotrend 1500 bundled remote */ | 240 | /* for the Technotrend 1500 bundled remote */ |
| 239 | ir_input_init(input_dev, &budget_ci->ir.state, | 241 | error = ir_input_init(input_dev, &budget_ci->ir.state, |
| 240 | IR_TYPE_RC5, &ir_codes_tt_1500_table); | 242 | IR_TYPE_RC5, &ir_codes_tt_1500_table); |
| 243 | if (error < 0) | ||
| 244 | goto out2; | ||
| 241 | 245 | ||
| 242 | if (rc5_device < 0) | 246 | if (rc5_device < 0) |
| 243 | budget_ci->ir.rc5_device = IR_DEVICE_ANY; | 247 | budget_ci->ir.rc5_device = IR_DEVICE_ANY; |
| @@ -246,8 +250,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci) | |||
| 246 | break; | 250 | break; |
| 247 | default: | 251 | default: |
| 248 | /* unknown remote */ | 252 | /* unknown remote */ |
| 249 | ir_input_init(input_dev, &budget_ci->ir.state, | 253 | error = ir_input_init(input_dev, &budget_ci->ir.state, |
| 250 | IR_TYPE_RC5, &ir_codes_budget_ci_old_table); | 254 | IR_TYPE_RC5, &ir_codes_budget_ci_old_table); |
| 255 | if (error < 0) | ||
| 256 | goto out2; | ||
| 251 | 257 | ||
| 252 | if (rc5_device < 0) | 258 | if (rc5_device < 0) |
| 253 | budget_ci->ir.rc5_device = IR_DEVICE_ANY; | 259 | budget_ci->ir.rc5_device = IR_DEVICE_ANY; |
| @@ -280,6 +286,7 @@ static int msp430_ir_init(struct budget_ci *budget_ci) | |||
| 280 | return 0; | 286 | return 0; |
| 281 | 287 | ||
| 282 | out2: | 288 | out2: |
| 289 | ir_input_free(input_dev); | ||
| 283 | input_free_device(input_dev); | 290 | input_free_device(input_dev); |
| 284 | out1: | 291 | out1: |
| 285 | return error; | 292 | return error; |
| @@ -297,6 +304,7 @@ static void msp430_ir_deinit(struct budget_ci *budget_ci) | |||
| 297 | del_timer_sync(&dev->timer); | 304 | del_timer_sync(&dev->timer); |
| 298 | ir_input_nokey(dev, &budget_ci->ir.state); | 305 | ir_input_nokey(dev, &budget_ci->ir.state); |
| 299 | 306 | ||
| 307 | ir_input_free(dev); | ||
| 300 | input_unregister_device(dev); | 308 | input_unregister_device(dev); |
| 301 | } | 309 | } |
| 302 | 310 | ||
diff --git a/drivers/media/video/bt8xx/bttv-input.c b/drivers/media/video/bt8xx/bttv-input.c index 62408ccf34c8..84a957e52c4b 100644 --- a/drivers/media/video/bt8xx/bttv-input.c +++ b/drivers/media/video/bt8xx/bttv-input.c | |||
| @@ -368,7 +368,10 @@ int bttv_input_init(struct bttv *btv) | |||
| 368 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", | 368 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", |
| 369 | pci_name(btv->c.pci)); | 369 | pci_name(btv->c.pci)); |
| 370 | 370 | ||
| 371 | ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); | 371 | err = ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); |
| 372 | if (err < 0) | ||
| 373 | goto err_out_free; | ||
| 374 | |||
| 372 | input_dev->name = ir->name; | 375 | input_dev->name = ir->name; |
| 373 | input_dev->phys = ir->phys; | 376 | input_dev->phys = ir->phys; |
| 374 | input_dev->id.bustype = BUS_PCI; | 377 | |
