power: tps80031: battery-charger: register as mfd sub device
[linux-2.6.git] / include / linux / usb.h
index 3185eb4..b08e04c 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/completion.h>  /* for struct completion */
 #include <linux/sched.h>       /* for current && schedule_timeout */
 #include <linux/mutex.h>       /* for struct mutex */
+#include <linux/pm_runtime.h>  /* for runtime PM */
 
 struct usb_device;
 struct usb_driver;
@@ -65,7 +66,7 @@ struct usb_host_endpoint {
        struct usb_ss_ep_comp_descriptor        ss_ep_comp;
        struct list_head                urb_list;
        void                            *hcpriv;
-       struct ep_device                *ep_dev;        /* For sysfs info */
+       struct ep_device                *ep_dev;        /* For sysfs info */
 
        unsigned char *extra;   /* Extra descriptors */
        int extralen;
@@ -96,8 +97,8 @@ enum usb_interface_condition {
 /**
  * struct usb_interface - what usb device drivers talk to
  * @altsetting: array of interface structures, one for each alternate
- *     setting that may be selected.  Each one includes a set of
- *     endpoint configurations.  They will be in no particular order.
+ *     setting that may be selected.  Each one includes a set of
+ *     endpoint configurations.  They will be in no particular order.
  * @cur_altsetting: the current altsetting.
  * @num_altsetting: number of altsettings defined.
  * @intf_assoc: interface association descriptor
@@ -127,6 +128,8 @@ enum usb_interface_condition {
  *      queued reset so that usb_cancel_queued_reset() doesn't try to
  *      remove from the workqueue when running inside the worker
  *      thread. See __usb_queue_reset_device().
+ * @resetting_device: USB core reset the device, so use alt setting 0 as
+ *     current; needs bandwidth alloc after reset.
  *
  * USB device drivers attach to interfaces on a physical device.  Each
  * interface encapsulates a single high level function, such as feeding
@@ -200,7 +203,7 @@ void usb_put_intf(struct usb_interface *intf);
 
 /* this maximum is arbitrary */
 #define USB_MAXINTERFACES      32
-#define USB_MAXIADS            USB_MAXINTERFACES/2
+#define USB_MAXIADS            (USB_MAXINTERFACES/2)
 
 /**
  * struct usb_interface_cache - long-term representation of a device interface
@@ -311,6 +314,10 @@ struct usb_bus {
        int busnum;                     /* Bus number (in order of reg) */
        const char *bus_name;           /* stable id (PCI slot_name etc) */
        u8 uses_dma;                    /* Does the host controller use DMA? */
+       u8 uses_pio_for_control;        /*
+                                        * Does the host controller use PIO
+                                        * for control transfers?
+                                        */
        u8 otg_port;                    /* 0, or number of OTG/HNP port */
        unsigned is_b_host:1;           /* true during some HNP roleswitches */
        unsigned b_hnp_enable:1;        /* OTG: did A-Host enable HNP? */
@@ -405,8 +412,6 @@ struct usb_tt;
  * @quirks: quirks of the whole device
  * @urbnum: number of URBs submitted for the whole device
  * @active_duration: total time device is not suspended
- * @last_busy: time of last use
- * @autosuspend_delay: in jiffies
  * @connect_time: time device was first connected
  * @do_remote_wakeup:  remote wakeup should be enabled
  * @reset_resume: needs reset instead of resume
@@ -420,7 +425,7 @@ struct usb_tt;
  */
 struct usb_device {
        int             devnum;
-       char            devpath [16];
+       char            devpath[16];
        u32             route;
        enum usb_device_state   state;
        enum usb_device_speed   speed;
@@ -453,7 +458,7 @@ struct usb_device {
        unsigned persist_enabled:1;
        unsigned have_langid:1;
        unsigned authorized:1;
-       unsigned authenticated:1;
+       unsigned authenticated:1;
        unsigned wusb:1;
        int string_langid;
 
@@ -479,8 +484,6 @@ struct usb_device {
        unsigned long active_duration;
 
 #ifdef CONFIG_PM
-       unsigned long last_busy;
-       int autosuspend_delay;
        unsigned long connect_time;
 
        unsigned do_remote_wakeup:1;
@@ -525,7 +528,7 @@ extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
 
 static inline void usb_mark_last_busy(struct usb_device *udev)
 {
-       udev->last_busy = jiffies;
+       pm_runtime_mark_last_busy(&udev->dev);
 }
 
 #else
@@ -620,7 +623,7 @@ extern struct usb_host_interface *usb_find_alt_setting(
  * USB hubs.  That makes it stay the same until systems are physically
  * reconfigured, by re-cabling a tree of USB devices or by moving USB host
  * controllers.  Adding and removing devices, including virtual root hubs
- * in host controller driver modules, does not change these path identifers;
+ * in host controller driver modules, does not change these path identifiers;
  * neither does rebooting or re-enumerating.  These are more useful identifiers
  * than changeable ("unstable") ones like bus numbers or device addresses.
  *
@@ -664,7 +667,7 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
  * This macro is used to create a struct usb_device_id that matches a
  * specific device.
  */
-#define USB_DEVICE(vend,prod) \
+#define USB_DEVICE(vend, prod) \
        .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
        .idVendor = (vend), \
        .idProduct = (prod)
@@ -790,12 +793,12 @@ struct usbdrv_wrap {
  *     usb_set_intfdata() to associate driver-specific data with the
  *     interface.  It may also use usb_set_interface() to specify the
  *     appropriate altsetting.  If unwilling to manage the interface,
- *     return -ENODEV, if genuine IO errors occured, an appropriate
+ *     return -ENODEV, if genuine IO errors occurred, an appropriate
  *     negative errno value.
  * @disconnect: Called when the interface is no longer accessible, usually
  *     because its device has been (or is being) disconnected or the
  *     driver module is being unloaded.
- * @ioctl: Used for drivers that want to talk to userspace through
+ * @unlocked_ioctl: Used for drivers that want to talk to userspace through
  *     the "usbfs" filesystem.  This lets devices provide ways to
  *     expose information to user space regardless of where they
  *     do (or don't) show up otherwise in the filesystem.
@@ -803,8 +806,10 @@ struct usbdrv_wrap {
  * @resume: Called when the device is being resumed by the system.
  * @reset_resume: Called when the suspended device has been reset instead
  *     of being resumed.
- * @pre_reset: Called by usb_reset_device() when the device
- *     is about to be reset.
+ * @pre_reset: Called by usb_reset_device() when the device is about to be
+ *     reset.  This routine must not return until the driver has no active
+ *     URBs for the device, and no more URBs may be submitted until the
+ *     post_reset method is called.
  * @post_reset: Called by usb_reset_device() after the device
  *     has been reset
  * @id_table: USB drivers use ID table to support hotplugging.
@@ -843,7 +848,7 @@ struct usb_driver {
 
        void (*disconnect) (struct usb_interface *intf);
 
-       int (*ioctl) (struct usb_interface *intf, unsigned int code,
+       int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code,
                        void *buf);
 
        int (*suspend) (struct usb_interface *intf, pm_message_t message);
@@ -973,6 +978,7 @@ extern int usb_disabled(void);
 #define URB_SETUP_MAP_SINGLE   0x00100000      /* Setup packet DMA mapped */
 #define URB_SETUP_MAP_LOCAL    0x00200000      /* HCD-local setup packet */
 #define URB_DMA_SG_COMBINED    0x00400000      /* S-G entries were combined */
+#define URB_ALIGNED_TEMP_BUFFER        0x00800000      /* Temp buffer was alloc'd */
 
 struct usb_iso_packet_descriptor {
        unsigned int offset;
@@ -1015,6 +1021,7 @@ typedef void (*usb_complete_t)(struct urb *);
  *     is a different endpoint (and pipe) from "out" endpoint two.
  *     The current configuration controls the existence, type, and
  *     maximum packet size of any given endpoint.
+ * @stream_id: the endpoint's stream ID for bulk streams
  * @dev: Identifies the USB device to perform the request.
  * @status: This is read in non-iso completion functions to get the
  *     status of the particular request.  ISO requests only use it
@@ -1186,7 +1193,7 @@ struct urb {
                                         * current owner */
        struct list_head anchor_list;   /* the URB may be anchored */
        struct usb_anchor *anchor;
-       struct usb_device *dev;         /* (in) pointer to associated device */
+       struct usb_device *dev;         /* (in) pointer to associated device */
        struct usb_host_endpoint *ep;   /* (internal) pointer to endpoint */
        unsigned int pipe;              /* (in) pipe information */
        unsigned int stream_id;         /* (in) stream ID */
@@ -1195,6 +1202,7 @@ struct urb {
        void *transfer_buffer;          /* (in) associated data buffer */
        dma_addr_t transfer_dma;        /* (in) dma addr for transfer_buffer */
        struct scatterlist *sg;         /* (in) scatter gather buffer list */
+       int num_mapped_sgs;             /* (internal) mapped sg entries */
        int num_sgs;                    /* (in) number of entries in the sg list */
        u32 transfer_buffer_length;     /* (in) data buffer length */
        u32 actual_length;              /* (return) actual transfer length */
@@ -1372,18 +1380,6 @@ void *usb_alloc_coherent(struct usb_device *dev, size_t size,
 void usb_free_coherent(struct usb_device *dev, size_t size,
        void *addr, dma_addr_t dma);
 
-/* Compatible macros while we switch over */
-static inline void *usb_buffer_alloc(struct usb_device *dev, size_t size,
-                                    gfp_t mem_flags, dma_addr_t *dma)
-{
-       return usb_alloc_coherent(dev, size, mem_flags, dma);
-}
-static inline void usb_buffer_free(struct usb_device *dev, size_t size,
-                                  void *addr, dma_addr_t dma)
-{
-       return usb_free_coherent(dev, size, addr, dma);
-}
-
 #if 0
 struct urb *usb_buffer_map(struct urb *urb);
 void usb_buffer_dmasync(struct urb *urb);
@@ -1535,21 +1531,21 @@ static inline unsigned int __create_pipe(struct usb_device *dev,
 }
 
 /* Create various pipes... */
-#define usb_sndctrlpipe(dev,endpoint)  \
+#define usb_sndctrlpipe(dev, endpoint) \
        ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvctrlpipe(dev,endpoint)  \
+#define usb_rcvctrlpipe(dev, endpoint) \
        ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndisocpipe(dev,endpoint)  \
+#define usb_sndisocpipe(dev, endpoint) \
        ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvisocpipe(dev,endpoint)  \
+#define usb_rcvisocpipe(dev, endpoint) \
        ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndbulkpipe(dev,endpoint)  \
+#define usb_sndbulkpipe(dev, endpoint) \
        ((PIPE_BULK << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvbulkpipe(dev,endpoint)  \
+#define usb_rcvbulkpipe(dev, endpoint) \
        ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
-#define usb_sndintpipe(dev,endpoint)   \
+#define usb_sndintpipe(dev, endpoint)  \
        ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint))
-#define usb_rcvintpipe(dev,endpoint)   \
+#define usb_rcvintpipe(dev, endpoint)  \
        ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
 
 static inline struct usb_host_endpoint *