diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2012-05-21 15:39:42 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2012-05-21 15:39:42 -0400 |
commit | 0ad8c6a22d03a1598f7cc6585c65354dadca62ad (patch) | |
tree | 1507deef3d55d5f3c71b2f76924fe1f6c6211905 /drivers/media/rc/winbond-cir.c | |
parent | 8527f8e2934683e53405fbe876a4e6f4a0c46eb8 (diff) | |
parent | 76e10d158efb6d4516018846f60c2ab5501900bc (diff) |
Merge tag 'v3.4' with SCSI updates, needed for subsequent firewire-sbp2 changes
Linux 3.4
Diffstat (limited to 'drivers/media/rc/winbond-cir.c')
-rw-r--r-- | drivers/media/rc/winbond-cir.c | 79 |
1 files changed, 40 insertions, 39 deletions
diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c index b09c5fae489b..342c2c8c1ddf 100644 --- a/drivers/media/rc/winbond-cir.c +++ b/drivers/media/rc/winbond-cir.c | |||
@@ -991,39 +991,10 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) | |||
991 | "(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n", | 991 | "(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n", |
992 | data->wbase, data->ebase, data->sbase, data->irq); | 992 | data->wbase, data->ebase, data->sbase, data->irq); |
993 | 993 | ||
994 | if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) { | ||
995 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
996 | data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1); | ||
997 | err = -EBUSY; | ||
998 | goto exit_free_data; | ||
999 | } | ||
1000 | |||
1001 | if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) { | ||
1002 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
1003 | data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1); | ||
1004 | err = -EBUSY; | ||
1005 | goto exit_release_wbase; | ||
1006 | } | ||
1007 | |||
1008 | if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) { | ||
1009 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
1010 | data->sbase, data->sbase + SP_IOMEM_LEN - 1); | ||
1011 | err = -EBUSY; | ||
1012 | goto exit_release_ebase; | ||
1013 | } | ||
1014 | |||
1015 | err = request_irq(data->irq, wbcir_irq_handler, | ||
1016 | IRQF_DISABLED, DRVNAME, device); | ||
1017 | if (err) { | ||
1018 | dev_err(dev, "Failed to claim IRQ %u\n", data->irq); | ||
1019 | err = -EBUSY; | ||
1020 | goto exit_release_sbase; | ||
1021 | } | ||
1022 | |||
1023 | led_trigger_register_simple("cir-tx", &data->txtrigger); | 994 | led_trigger_register_simple("cir-tx", &data->txtrigger); |
1024 | if (!data->txtrigger) { | 995 | if (!data->txtrigger) { |
1025 | err = -ENOMEM; | 996 | err = -ENOMEM; |
1026 | goto exit_free_irq; | 997 | goto exit_free_data; |
1027 | } | 998 | } |
1028 | 999 | ||
1029 | led_trigger_register_simple("cir-rx", &data->rxtrigger); | 1000 | led_trigger_register_simple("cir-rx", &data->rxtrigger); |
@@ -1046,6 +1017,7 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) | |||
1046 | goto exit_unregister_led; | 1017 | goto exit_unregister_led; |
1047 | } | 1018 | } |
1048 | 1019 | ||
1020 | data->dev->driver_type = RC_DRIVER_IR_RAW; | ||
1049 | data->dev->driver_name = WBCIR_NAME; | 1021 | data->dev->driver_name = WBCIR_NAME; |
1050 | data->dev->input_name = WBCIR_NAME; | 1022 | data->dev->input_name = WBCIR_NAME; |
1051 | data->dev->input_phys = "wbcir/cir0"; | 1023 | data->dev->input_phys = "wbcir/cir0"; |
@@ -1061,9 +1033,38 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) | |||
1061 | data->dev->priv = data; | 1033 | data->dev->priv = data; |
1062 | data->dev->dev.parent = &device->dev; | 1034 | data->dev->dev.parent = &device->dev; |
1063 | 1035 | ||
1036 | if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) { | ||
1037 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
1038 | data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1); | ||
1039 | err = -EBUSY; | ||
1040 | goto exit_free_rc; | ||
1041 | } | ||
1042 | |||
1043 | if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) { | ||
1044 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
1045 | data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1); | ||
1046 | err = -EBUSY; | ||
1047 | goto exit_release_wbase; | ||
1048 | } | ||
1049 | |||
1050 | if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) { | ||
1051 | dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", | ||
1052 | data->sbase, data->sbase + SP_IOMEM_LEN - 1); | ||
1053 | err = -EBUSY; | ||
1054 | goto exit_release_ebase; | ||
1055 | } | ||
1056 | |||
1057 | err = request_irq(data->irq, wbcir_irq_handler, | ||
1058 | IRQF_DISABLED, DRVNAME, device); | ||
1059 | if (err) { | ||
1060 | dev_err(dev, "Failed to claim IRQ %u\n", data->irq); | ||
1061 | err = -EBUSY; | ||
1062 | goto exit_release_sbase; | ||
1063 | } | ||
1064 | |||
1064 | err = rc_register_device(data->dev); | 1065 | err = rc_register_device(data->dev); |
1065 | if (err) | 1066 | if (err) |
1066 | goto exit_free_rc; | 1067 | goto exit_free_irq; |
1067 | 1068 | ||
1068 | device_init_wakeup(&device->dev, 1); | 1069 | device_init_wakeup(&device->dev, 1); |
1069 | 1070 | ||
@@ -1071,14 +1072,6 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) | |||
1071 | 1072 | ||
1072 | return 0; | 1073 | return 0; |
1073 | 1074 | ||
1074 | exit_free_rc: | ||
1075 | rc_free_device(data->dev); | ||
1076 | exit_unregister_led: | ||
1077 | led_classdev_unregister(&data->led); | ||
1078 | exit_unregister_rxtrigger: | ||
1079 | led_trigger_unregister_simple(data->rxtrigger); | ||
1080 | exit_unregister_txtrigger: | ||
1081 | led_trigger_unregister_simple(data->txtrigger); | ||
1082 | exit_free_irq: | 1075 | exit_free_irq: |
1083 | free_irq(data->irq, device); | 1076 | free_irq(data->irq, device); |
1084 | exit_release_sbase: | 1077 | exit_release_sbase: |
@@ -1087,6 +1080,14 @@ exit_release_ebase: | |||
1087 | release_region(data->ebase, EHFUNC_IOMEM_LEN); | 1080 | release_region(data->ebase, EHFUNC_IOMEM_LEN); |
1088 | exit_release_wbase: | 1081 | exit_release_wbase: |
1089 | release_region(data->wbase, WAKEUP_IOMEM_LEN); | 1082 | release_region(data->wbase, WAKEUP_IOMEM_LEN); |
1083 | exit_free_rc: | ||
1084 | rc_free_device(data->dev); | ||
1085 | exit_unregister_led: | ||
1086 | led_classdev_unregister(&data->led); | ||
1087 | exit_unregister_rxtrigger: | ||
1088 | led_trigger_unregister_simple(data->rxtrigger); | ||
1089 | exit_unregister_txtrigger: | ||
1090 | led_trigger_unregister_simple(data->txtrigger); | ||
1090 | exit_free_data: | 1091 | exit_free_data: |
1091 | kfree(data); | 1092 | kfree(data); |
1092 | pnp_set_drvdata(device, NULL); | 1093 | pnp_set_drvdata(device, NULL); |