projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[media] ir-core: make struct rc_dev the primary interface
[deliverable/linux.git]
/
drivers
/
media
/
rc
/
mceusb.c
diff --git
a/drivers/media/rc/mceusb.c
b/drivers/media/rc/mceusb.c
index 392ca24132dafd5456e905fa61c216d566703976..539bec2974b71bd4a6eda37dda091e58c1ef93cd 100644
(file)
--- a/
drivers/media/rc/mceusb.c
+++ b/
drivers/media/rc/mceusb.c
@@
-35,7
+35,6
@@
#include <linux/device.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/slab.h>
-#include <linux/input.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <media/ir-core.h>
#include <linux/usb.h>
#include <linux/usb/input.h>
#include <media/ir-core.h>
@@
-317,7
+316,7
@@
static struct usb_device_id mceusb_dev_table[] = {
/* data structure for each usb transceiver */
struct mceusb_dev {
/* ir-core bits */
/* data structure for each usb transceiver */
struct mceusb_dev {
/* ir-core bits */
- struct
ir_dev_props *props
;
+ struct
rc_dev *rc
;
/* optional features we can enable */
bool carrier_report_enabled;
/* optional features we can enable */
bool carrier_report_enabled;
@@
-325,7
+324,6
@@
struct mceusb_dev {
/* core device bits */
struct device *dev;
/* core device bits */
struct device *dev;
- struct input_dev *idev;
/* usb */
struct usb_device *usbdev;
/* usb */
struct usb_device *usbdev;
@@
-663,9
+661,9
@@
static void mce_sync_in(struct mceusb_dev *ir, unsigned char *data, int size)
}
/* Send data out the IR blaster port(s) */
}
/* Send data out the IR blaster port(s) */
-static int mceusb_tx_ir(
void *pri
v, int *txbuf, u32 n)
+static int mceusb_tx_ir(
struct rc_dev *de
v, int *txbuf, u32 n)
{
{
- struct mceusb_dev *ir = priv;
+ struct mceusb_dev *ir =
dev->
priv;
int i, ret = 0;
int count, cmdcount = 0;
unsigned char *cmdbuf; /* MCE command buffer */
int i, ret = 0;
int count, cmdcount = 0;
unsigned char *cmdbuf; /* MCE command buffer */
@@
-749,9
+747,9
@@
out:
}
/* Sets active IR outputs -- mce devices typically have two */
}
/* Sets active IR outputs -- mce devices typically have two */
-static int mceusb_set_tx_mask(
void *pri
v, u32 mask)
+static int mceusb_set_tx_mask(
struct rc_dev *de
v, u32 mask)
{
{
- struct mceusb_dev *ir = priv;
+ struct mceusb_dev *ir =
dev->
priv;
if (ir->flags.tx_mask_normal)
ir->tx_mask = mask;
if (ir->flags.tx_mask_normal)
ir->tx_mask = mask;
@@
-763,9
+761,9
@@
static int mceusb_set_tx_mask(void *priv, u32 mask)
}
/* Sets the send carrier frequency and mode */
}
/* Sets the send carrier frequency and mode */
-static int mceusb_set_tx_carrier(
void *pri
v, u32 carrier)
+static int mceusb_set_tx_carrier(
struct rc_dev *de
v, u32 carrier)
{
{
- struct mceusb_dev *ir = priv;
+ struct mceusb_dev *ir =
dev->
priv;
int clk = 10000000;
int prescaler = 0, divisor = 0;
unsigned char cmdbuf[4] = { MCE_COMMAND_HEADER,
int clk = 10000000;
int prescaler = 0, divisor = 0;
unsigned char cmdbuf[4] = { MCE_COMMAND_HEADER,
@@
-819,7
+817,7
@@
static void mceusb_handle_command(struct mceusb_dev *ir, int index)
switch (ir->buf_in[index]) {
/* 2-byte return value commands */
case MCE_CMD_S_TIMEOUT:
switch (ir->buf_in[index]) {
/* 2-byte return value commands */
case MCE_CMD_S_TIMEOUT:
- ir->
props
->timeout = MS_TO_NS((hi << 8 | lo) / 2);
+ ir->
rc
->timeout = MS_TO_NS((hi << 8 | lo) / 2);
break;
/* 1-byte return value commands */
break;
/* 1-byte return value commands */
@@
-866,7
+864,7
@@
static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len)
rawir.pulse ? "pulse" : "space",
rawir.duration);
rawir.pulse ? "pulse" : "space",
rawir.duration);
- ir_raw_event_store_with_filter(ir->
idev
, &rawir);
+ ir_raw_event_store_with_filter(ir->
rc
, &rawir);
break;
case CMD_DATA:
ir->rem--;
break;
case CMD_DATA:
ir->rem--;
@@
-893,7
+891,7
@@
static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len)
ir->parser_state = CMD_HEADER;
}
dev_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n");
ir->parser_state = CMD_HEADER;
}
dev_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n");
- ir_raw_event_handle(ir->
idev
);
+ ir_raw_event_handle(ir->
rc
);
}
static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs)
}
static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs)
@@
-1035,72
+1033,54
@@
static void mceusb_get_parameters(struct mceusb_dev *ir)
mce_sync_in(ir, NULL, maxp);
}
mce_sync_in(ir, NULL, maxp);
}
-static struct
input_dev *mceusb_init_input
_dev(struct mceusb_dev *ir)
+static struct
rc_dev *mceusb_init_rc
_dev(struct mceusb_dev *ir)
{
{
- struct input_dev *idev;
- struct ir_dev_props *props;
struct device *dev = ir->dev;
struct device *dev = ir->dev;
- const char *rc_map = RC_MAP_RC6_MCE;
- const char *name = "Media Center Ed. eHome Infrared Remote Transceiver";
- int ret = -ENODEV;
-
- idev = input_allocate_device();
- if (!idev) {
- dev_err(dev, "remote input dev allocation failed\n");
- goto idev_alloc_failed;
- }
+ struct rc_dev *rc;
+ int ret;
- ret = -ENOMEM;
- props = kzalloc(sizeof(struct ir_dev_props), GFP_KERNEL);
- if (!props) {
- dev_err(dev, "remote ir dev props allocation failed\n");
- goto props_alloc_failed;
+ rc = rc_allocate_device();
+ if (!rc) {
+ dev_err(dev, "remote dev allocation failed\n");
+ goto out;
}
}
- if (mceusb_model[ir->model].name)
- name = mceusb_model[ir->model].name;
-
snprintf(ir->name, sizeof(ir->name), "%s (%04x:%04x)",
snprintf(ir->name, sizeof(ir->name), "%s (%04x:%04x)",
- name,
+ mceusb_model[ir->model].name ?
+ mceusb_model[ir->model].name :
+ "Media Center Ed. eHome Infrared Remote Transceiver",
le16_to_cpu(ir->usbdev->descriptor.idVendor),
le16_to_cpu(ir->usbdev->descriptor.idProduct));
le16_to_cpu(ir->usbdev->descriptor.idVendor),
le16_to_cpu(ir->usbdev->descriptor.idProduct));
- idev->name = ir->name;
usb_make_path(ir->usbdev, ir->phys, sizeof(ir->phys));
usb_make_path(ir->usbdev, ir->phys, sizeof(ir->phys));
- strlcat(ir->phys, "/input0", sizeof(ir->phys));
- idev->phys = ir->phys;
- props->priv = ir;
- props->driver_type = RC_DRIVER_IR_RAW;
- props->allowed_protos = IR_TYPE_ALL;
- props->timeout = MS_TO_NS(1000);
+ rc->input_name = ir->name;
+ rc->input_phys = ir->phys;
+ usb_to_input_id(ir->usbdev, &rc->input_id);
+ rc->dev.parent = dev;
+ rc->priv = ir;
+ rc->driver_type = RC_DRIVER_IR_RAW;
+ rc->allowed_protos = IR_TYPE_ALL;
+ rc->timeout = MS_TO_NS(1000);
if (!ir->flags.no_tx) {
if (!ir->flags.no_tx) {
-
props
->s_tx_mask = mceusb_set_tx_mask;
-
props
->s_tx_carrier = mceusb_set_tx_carrier;
-
props
->tx_ir = mceusb_tx_ir;
+
rc
->s_tx_mask = mceusb_set_tx_mask;
+
rc
->s_tx_carrier = mceusb_set_tx_carrier;
+
rc
->tx_ir = mceusb_tx_ir;
}
}
+ rc->driver_name = DRIVER_NAME;
+ rc->map_name = mceusb_model[ir->model].rc_map ?
+ mceusb_model[ir->model].rc_map : RC_MAP_RC6_MCE;
- ir->props = props;
-
- usb_to_input_id(ir->usbdev, &idev->id);
- idev->dev.parent = ir->dev;
-
- if (mceusb_model[ir->model].rc_map)
- rc_map = mceusb_model[ir->model].rc_map;
-
- ret = ir_input_register(idev, rc_map, props, DRIVER_NAME);
+ ret = rc_register_device(rc);
if (ret < 0) {
if (ret < 0) {
- dev_err(dev, "remote
input device register
failed\n");
- goto
irdev_failed
;
+ dev_err(dev, "remote
dev registration
failed\n");
+ goto
out
;
}
}
- return
idev
;
+ return
rc
;
-irdev_failed:
- kfree(props);
-props_alloc_failed:
- input_free_device(idev);
-idev_alloc_failed:
+out:
+ rc_free_device(rc);
return NULL;
}
return NULL;
}
@@
-1212,9
+1192,9
@@
static int __devinit mceusb_dev_probe(struct usb_interface *intf,
snprintf(name + strlen(name), sizeof(name) - strlen(name),
" %s", buf);
snprintf(name + strlen(name), sizeof(name) - strlen(name),
" %s", buf);
- ir->
idev = mceusb_init_input
_dev(ir);
- if (!ir->
idev
)
- goto
input
_dev_fail;
+ ir->
rc = mceusb_init_rc
_dev(ir);
+ if (!ir->
rc
)
+ goto
rc
_dev_fail;
/* flush buffers on the device */
mce_sync_in(ir, NULL, maxp);
/* flush buffers on the device */
mce_sync_in(ir, NULL, maxp);
@@
-1235,7
+1215,7
@@
static int __devinit mceusb_dev_probe(struct usb_interface *intf,
mceusb_get_parameters(ir);
if (!ir->flags.no_tx)
mceusb_get_parameters(ir);
if (!ir->flags.no_tx)
- mceusb_set_tx_mask(ir, MCE_DEFAULT_TX_MASK);
+ mceusb_set_tx_mask(ir
->rc
, MCE_DEFAULT_TX_MASK);
usb_set_intfdata(intf, ir);
usb_set_intfdata(intf, ir);
@@
-1245,7
+1225,7
@@
static int __devinit mceusb_dev_probe(struct usb_interface *intf,
return 0;
/* Error-handling path */
return 0;
/* Error-handling path */
-
input
_dev_fail:
+
rc
_dev_fail:
usb_free_urb(ir->urb_in);
urb_in_alloc_fail:
usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in);
usb_free_urb(ir->urb_in);
urb_in_alloc_fail:
usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in);
@@
-1269,7
+1249,7
@@
static void __devexit mceusb_dev_disconnect(struct usb_interface *intf)
return;
ir->usbdev = NULL;
return;
ir->usbdev = NULL;
-
ir_input_unregister(ir->idev
);
+
rc_unregister_device(ir->rc
);
usb_kill_urb(ir->urb_in);
usb_free_urb(ir->urb_in);
usb_free_coherent(dev, ir->len_in, ir->buf_in, ir->dma_in);
usb_kill_urb(ir->urb_in);
usb_free_urb(ir->urb_in);
usb_free_coherent(dev, ir->len_in, ir->buf_in, ir->dma_in);
This page took
0.140856 seconds
and
5
git commands to generate.