Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 15488
b: refs/heads/master
c: 7931e1c
h: refs/heads/master
v: v3
  • Loading branch information
Matthew Dharm authored and Greg Kroah-Hartman committed Jan 4, 2006
1 parent 30c37ef commit 56a7fac
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b9b09422570e5e35a9f590a1ead63e711aefac8c
refs/heads/master: 7931e1c6f8007d5fef8a0bb2dc71bd97315eeae9
27 changes: 27 additions & 0 deletions trunk/drivers/usb/storage/onetouch.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ struct usb_onetouch {
struct urb *irq; /* urb for interrupt in report */
unsigned char *data; /* input data */
dma_addr_t data_dma;
unsigned int is_open:1;
};

static void usb_onetouch_irq(struct urb *urb, struct pt_regs *regs)
Expand Down Expand Up @@ -89,6 +90,7 @@ static int usb_onetouch_open(struct input_dev *dev)
{
struct usb_onetouch *onetouch = dev->private;

onetouch->is_open = 1;
onetouch->irq->dev = onetouch->udev;
if (usb_submit_urb(onetouch->irq, GFP_KERNEL)) {
err("usb_submit_urb failed");
Expand All @@ -103,8 +105,30 @@ static void usb_onetouch_close(struct input_dev *dev)
struct usb_onetouch *onetouch = dev->private;

usb_kill_urb(onetouch->irq);
onetouch->is_open = 0;
}

#ifdef CONFIG_PM
static void usb_onetouch_pm_hook(struct us_data *us, int action)
{
struct usb_onetouch *onetouch = (struct usb_onetouch *) us->extra;

if (onetouch->is_open) {
switch (action) {
case US_SUSPEND:
usb_kill_urb(onetouch->irq);
break;
case US_RESUME:
if (usb_submit_urb(onetouch->irq, GFP_KERNEL) != 0)
err("usb_submit_urb failed");
break;
default:
break;
}
}
}
#endif /* CONFIG_PM */

int onetouch_connect_input(struct us_data *ss)
{
struct usb_device *udev = ss->pusb_dev;
Expand Down Expand Up @@ -185,6 +209,9 @@ int onetouch_connect_input(struct us_data *ss)

ss->extra_destructor = onetouch_release_input;
ss->extra = onetouch;
#ifdef CONFIG_PM
ss->suspend_resume_hook = usb_onetouch_pm_hook;
#endif

input_register_device(onetouch->dev);

Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/usb/storage/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ static int storage_suspend(struct usb_interface *iface, pm_message_t message)
down(&us->dev_semaphore);

US_DEBUGP("%s\n", __FUNCTION__);
if (us->suspend_resume_hook)
(us->suspend_resume_hook)(us, US_SUSPEND);
iface->dev.power.power_state.event = message.event;

/* When runtime PM is working, we'll set a flag to indicate
Expand All @@ -204,6 +206,8 @@ static int storage_resume(struct usb_interface *iface)
down(&us->dev_semaphore);

US_DEBUGP("%s\n", __FUNCTION__);
if (us->suspend_resume_hook)
(us->suspend_resume_hook)(us, US_RESUME);
iface->dev.power.power_state.event = PM_EVENT_ON;

up(&us->dev_semaphore);
Expand Down
9 changes: 8 additions & 1 deletion trunk/drivers/usb/storage/usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,11 @@ struct us_unusual_dev {
typedef int (*trans_cmnd)(struct scsi_cmnd *, struct us_data*);
typedef int (*trans_reset)(struct us_data*);
typedef void (*proto_cmnd)(struct scsi_cmnd*, struct us_data*);
typedef void (*extra_data_destructor)(void *); /* extra data destructor */
typedef void (*extra_data_destructor)(void *); /* extra data destructor */
typedef void (*pm_hook)(struct us_data *, int); /* power management hook */

#define US_SUSPEND 0
#define US_RESUME 1

/* we allocate one of these for every device that we remember */
struct us_data {
Expand Down Expand Up @@ -149,6 +153,9 @@ struct us_data {
/* subdriver information */
void *extra; /* Any extra data */
extra_data_destructor extra_destructor;/* extra data destructor */
#ifdef CONFIG_PM
pm_hook suspend_resume_hook;
#endif
};

/* Convert between us_data and the corresponding Scsi_Host */
Expand Down

0 comments on commit 56a7fac

Please sign in to comment.