diff options
Diffstat (limited to 'drivers/media/dvb/siano/smsir.c')
-rw-r--r-- | drivers/media/dvb/siano/smsir.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/drivers/media/dvb/siano/smsir.c b/drivers/media/dvb/siano/smsir.c index d0e4639ee9db..37bc5c4b8ad8 100644 --- a/drivers/media/dvb/siano/smsir.c +++ b/drivers/media/dvb/siano/smsir.c | |||
@@ -40,30 +40,29 @@ void sms_ir_event(struct smscore_device_t *coredev, const char *buf, int len) | |||
40 | const s32 *samples = (const void *)buf; | 40 | const s32 *samples = (const void *)buf; |
41 | 41 | ||
42 | for (i = 0; i < len >> 2; i++) { | 42 | for (i = 0; i < len >> 2; i++) { |
43 | struct ir_raw_event ev; | 43 | DEFINE_IR_RAW_EVENT(ev); |
44 | 44 | ||
45 | ev.duration = abs(samples[i]) * 1000; /* Convert to ns */ | 45 | ev.duration = abs(samples[i]) * 1000; /* Convert to ns */ |
46 | ev.pulse = (samples[i] > 0) ? false : true; | 46 | ev.pulse = (samples[i] > 0) ? false : true; |
47 | 47 | ||
48 | ir_raw_event_store(coredev->ir.input_dev, &ev); | 48 | ir_raw_event_store(coredev->ir.dev, &ev); |
49 | } | 49 | } |
50 | ir_raw_event_handle(coredev->ir.input_dev); | 50 | ir_raw_event_handle(coredev->ir.dev); |
51 | } | 51 | } |
52 | 52 | ||
53 | int sms_ir_init(struct smscore_device_t *coredev) | 53 | int sms_ir_init(struct smscore_device_t *coredev) |
54 | { | 54 | { |
55 | struct input_dev *input_dev; | 55 | int err; |
56 | int board_id = smscore_get_board_id(coredev); | 56 | int board_id = smscore_get_board_id(coredev); |
57 | struct rc_dev *dev; | ||
57 | 58 | ||
58 | sms_log("Allocating input device"); | 59 | sms_log("Allocating rc device"); |
59 | input_dev = input_allocate_device(); | 60 | dev = rc_allocate_device(); |
60 | if (!input_dev) { | 61 | if (!dev) { |
61 | sms_err("Not enough memory"); | 62 | sms_err("Not enough memory"); |
62 | return -ENOMEM; | 63 | return -ENOMEM; |
63 | } | 64 | } |
64 | 65 | ||
65 | coredev->ir.input_dev = input_dev; | ||
66 | |||
67 | coredev->ir.controller = 0; /* Todo: vega/nova SPI number */ | 66 | coredev->ir.controller = 0; /* Todo: vega/nova SPI number */ |
68 | coredev->ir.timeout = IR_DEFAULT_TIMEOUT; | 67 | coredev->ir.timeout = IR_DEFAULT_TIMEOUT; |
69 | sms_log("IR port %d, timeout %d ms", | 68 | sms_log("IR port %d, timeout %d ms", |
@@ -75,38 +74,41 @@ int sms_ir_init(struct smscore_device_t *coredev) | |||
75 | strlcpy(coredev->ir.phys, coredev->devpath, sizeof(coredev->ir.phys)); | 74 | strlcpy(coredev->ir.phys, coredev->devpath, sizeof(coredev->ir.phys)); |
76 | strlcat(coredev->ir.phys, "/ir0", sizeof(coredev->ir.phys)); | 75 | strlcat(coredev->ir.phys, "/ir0", sizeof(coredev->ir.phys)); |
77 | 76 | ||
78 | input_dev->name = coredev->ir.name; | 77 | dev->input_name = coredev->ir.name; |
79 | input_dev->phys = coredev->ir.phys; | 78 | dev->input_phys = coredev->ir.phys; |
80 | input_dev->dev.parent = coredev->device; | 79 | dev->dev.parent = coredev->device; |
81 | 80 | ||
82 | #if 0 | 81 | #if 0 |
83 | /* TODO: properly initialize the parameters bellow */ | 82 | /* TODO: properly initialize the parameters bellow */ |
84 | input_dev->id.bustype = BUS_USB; | 83 | dev->input_id.bustype = BUS_USB; |
85 | input_dev->id.version = 1; | 84 | dev->input_id.version = 1; |
86 | input_dev->id.vendor = le16_to_cpu(dev->udev->descriptor.idVendor); | 85 | dev->input_id.vendor = le16_to_cpu(dev->udev->descriptor.idVendor); |
87 | input_dev->id.product = le16_to_cpu(dev->udev->descriptor.idProduct); | 86 | dev->input_id.product = le16_to_cpu(dev->udev->descriptor.idProduct); |
88 | #endif | 87 | #endif |
89 | 88 | ||
90 | coredev->ir.props.priv = coredev; | 89 | dev->priv = coredev; |
91 | coredev->ir.props.driver_type = RC_DRIVER_IR_RAW; | 90 | dev->driver_type = RC_DRIVER_IR_RAW; |
92 | coredev->ir.props.allowed_protos = IR_TYPE_ALL; | 91 | dev->allowed_protos = RC_TYPE_ALL; |
92 | dev->map_name = sms_get_board(board_id)->rc_codes; | ||
93 | dev->driver_name = MODULE_NAME; | ||
93 | 94 | ||
94 | sms_log("Input device (IR) %s is set for key events", input_dev->name); | 95 | sms_log("Input device (IR) %s is set for key events", dev->input_name); |
95 | 96 | ||
96 | if (ir_input_register(input_dev, sms_get_board(board_id)->rc_codes, | 97 | err = rc_register_device(dev); |
97 | &coredev->ir.props, MODULE_NAME)) { | 98 | if (err < 0) { |
98 | sms_err("Failed to register device"); | 99 | sms_err("Failed to register device"); |
99 | input_free_device(input_dev); | 100 | rc_free_device(dev); |
100 | return -EACCES; | 101 | return err; |
101 | } | 102 | } |
102 | 103 | ||
104 | coredev->ir.dev = dev; | ||
103 | return 0; | 105 | return 0; |
104 | } | 106 | } |
105 | 107 | ||
106 | void sms_ir_exit(struct smscore_device_t *coredev) | 108 | void sms_ir_exit(struct smscore_device_t *coredev) |
107 | { | 109 | { |
108 | if (coredev->ir.input_dev) | 110 | if (coredev->ir.dev) |
109 | ir_input_unregister(coredev->ir.input_dev); | 111 | rc_unregister_device(coredev->ir.dev); |
110 | 112 | ||
111 | sms_log(""); | 113 | sms_log(""); |
112 | } | 114 | } |