[PATCH] Input: convert konicawc to dynamic input_dev allocation
Input: convert konicawc to dynamic input_dev allocation This is required for input_dev sysfs integration Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
c7f7a569d9
Коммит
0259567ad6
|
@ -119,7 +119,7 @@ struct konicawc {
|
||||||
int yplanesz; /* Number of bytes in the Y plane */
|
int yplanesz; /* Number of bytes in the Y plane */
|
||||||
unsigned int buttonsts:1;
|
unsigned int buttonsts:1;
|
||||||
#ifdef CONFIG_INPUT
|
#ifdef CONFIG_INPUT
|
||||||
struct input_dev input;
|
struct input_dev *input;
|
||||||
char input_physname[64];
|
char input_physname[64];
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -218,6 +218,57 @@ static void konicawc_adjust_picture(struct uvd *uvd)
|
||||||
konicawc_camera_on(uvd);
|
konicawc_camera_on(uvd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_INPUT
|
||||||
|
|
||||||
|
static void konicawc_register_input(struct konicawc *cam, struct usb_device *dev)
|
||||||
|
{
|
||||||
|
struct input_dev *input_dev;
|
||||||
|
|
||||||
|
usb_make_path(dev, cam->input_physname, sizeof(cam->input_physname));
|
||||||
|
strncat(cam->input_physname, "/input0", sizeof(cam->input_physname));
|
||||||
|
|
||||||
|
cam->input = input_dev = input_allocate_device();
|
||||||
|
if (!input_dev) {
|
||||||
|
warn("Not enough memory for camera's input device\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
input_dev->name = "Konicawc snapshot button";
|
||||||
|
input_dev->phys = cam->input_physname;
|
||||||
|
usb_to_input_id(dev, &input_dev->id);
|
||||||
|
input_dev->cdev.dev = &dev->dev;
|
||||||
|
|
||||||
|
input_dev->evbit[0] = BIT(EV_KEY);
|
||||||
|
input_dev->keybit[LONG(BTN_0)] = BIT(BTN_0);
|
||||||
|
|
||||||
|
input_dev->private = cam;
|
||||||
|
|
||||||
|
input_register_device(cam->input);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void konicawc_unregister_input(struct konicawc *cam)
|
||||||
|
{
|
||||||
|
if (cam->input) {
|
||||||
|
input_unregister_device(cam->input);
|
||||||
|
cam->input = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void konicawc_report_buttonstat(struct konicawc *cam)
|
||||||
|
{
|
||||||
|
if (cam->input) {
|
||||||
|
input_report_key(cam->input, BTN_0, cam->buttonsts);
|
||||||
|
input_sync(cam->input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline void konicawc_register_input(struct konicawc *cam, struct usb_device *dev) { }
|
||||||
|
static inline void konicawc_unregister_input(struct konicawc *cam) { }
|
||||||
|
static inline void konicawc_report_buttonstat(struct konicawc *cam) { }
|
||||||
|
|
||||||
|
#endif /* CONFIG_INPUT */
|
||||||
|
|
||||||
static int konicawc_compress_iso(struct uvd *uvd, struct urb *dataurb, struct urb *stsurb)
|
static int konicawc_compress_iso(struct uvd *uvd, struct urb *dataurb, struct urb *stsurb)
|
||||||
{
|
{
|
||||||
|
@ -273,10 +324,7 @@ static int konicawc_compress_iso(struct uvd *uvd, struct urb *dataurb, struct ur
|
||||||
if(button != cam->buttonsts) {
|
if(button != cam->buttonsts) {
|
||||||
DEBUG(2, "button: %sclicked", button ? "" : "un");
|
DEBUG(2, "button: %sclicked", button ? "" : "un");
|
||||||
cam->buttonsts = button;
|
cam->buttonsts = button;
|
||||||
#ifdef CONFIG_INPUT
|
konicawc_report_buttonstat(cam);
|
||||||
input_report_key(&cam->input, BTN_0, cam->buttonsts);
|
|
||||||
input_sync(&cam->input);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sts == 0x01) { /* drop frame */
|
if(sts == 0x01) { /* drop frame */
|
||||||
|
@ -718,7 +766,6 @@ static void konicawc_configure_video(struct uvd *uvd)
|
||||||
DEBUG(1, "setting initial values");
|
DEBUG(1, "setting initial values");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int konicawc_probe(struct usb_interface *intf, const struct usb_device_id *devid)
|
static int konicawc_probe(struct usb_interface *intf, const struct usb_device_id *devid)
|
||||||
{
|
{
|
||||||
struct usb_device *dev = interface_to_usbdev(intf);
|
struct usb_device *dev = interface_to_usbdev(intf);
|
||||||
|
@ -839,21 +886,8 @@ static int konicawc_probe(struct usb_interface *intf, const struct usb_device_id
|
||||||
err("usbvideo_RegisterVideoDevice() failed.");
|
err("usbvideo_RegisterVideoDevice() failed.");
|
||||||
uvd = NULL;
|
uvd = NULL;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_INPUT
|
|
||||||
/* Register input device for button */
|
|
||||||
memset(&cam->input, 0, sizeof(struct input_dev));
|
|
||||||
cam->input.name = "Konicawc snapshot button";
|
|
||||||
cam->input.private = cam;
|
|
||||||
cam->input.evbit[0] = BIT(EV_KEY);
|
|
||||||
cam->input.keybit[LONG(BTN_0)] = BIT(BTN_0);
|
|
||||||
usb_to_input_id(dev, &cam->input.id);
|
|
||||||
input_register_device(&cam->input);
|
|
||||||
|
|
||||||
usb_make_path(dev, cam->input_physname, 56);
|
konicawc_register_input(cam, dev);
|
||||||
strcat(cam->input_physname, "/input0");
|
|
||||||
cam->input.phys = cam->input_physname;
|
|
||||||
info("konicawc: %s on %s\n", cam->input.name, cam->input.phys);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uvd) {
|
if (uvd) {
|
||||||
|
@ -869,9 +903,8 @@ static void konicawc_free_uvd(struct uvd *uvd)
|
||||||
int i;
|
int i;
|
||||||
struct konicawc *cam = (struct konicawc *)uvd->user_data;
|
struct konicawc *cam = (struct konicawc *)uvd->user_data;
|
||||||
|
|
||||||
#ifdef CONFIG_INPUT
|
konicawc_unregister_input(cam);
|
||||||
input_unregister_device(&cam->input);
|
|
||||||
#endif
|
|
||||||
for (i = 0; i < USBVIDEO_NUMSBUF; i++) {
|
for (i = 0; i < USBVIDEO_NUMSBUF; i++) {
|
||||||
usb_free_urb(cam->sts_urb[i]);
|
usb_free_urb(cam->sts_urb[i]);
|
||||||
cam->sts_urb[i] = NULL;
|
cam->sts_urb[i] = NULL;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче