Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (141 commits) USB: mct_u232: fix broken close USB: gadget: amd5536udc.c: fix error path USB: imx21-hcd - fix off by one resource size calculation usb: gadget: fix Kconfig warning usb: r8a66597-udc: Add processing when USB was removed. mxc_udc: add workaround for ENGcm09152 for i.MX35 USB: ftdi_sio: add device ids for ScienceScope USB: musb: AM35x: Workaround for fifo read issue USB: musb: add musb support for AM35x USB: AM35x: Add musb support usb: Fix linker errors with CONFIG_PM=n USB: ohci-sh - use resource_size instead of defining its own resource_len macro USB: isp1362-hcd - use resource_size instead of defining its own resource_len macro USB: isp116x-hcd - use resource_size instead of defining its own resource_len macro USB: xhci: Fix compile error when CONFIG_PM=n USB: accept some invalid ep0-maxpacket values USB: xHCI: PCI power management implementation USB: xHCI: bus power management implementation USB: xHCI: port remote wakeup implementation USB: xHCI: port power management implementation ... Manually fix up (non-data) conflict: the SCSI merge gad renamed the 'hw_sector_size' member to 'physical_block_size', and the USB tree brought a new use of it.
This commit is contained in:
@@ -32,6 +32,8 @@
|
||||
|
||||
#define USB_CDC_PROTO_EEM 7
|
||||
|
||||
#define USB_CDC_NCM_PROTO_NTB 1
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@@ -274,13 +276,13 @@ struct usb_cdc_notification {
|
||||
/*
|
||||
* Class Specific structures and constants
|
||||
*
|
||||
* CDC NCM parameter structure, CDC NCM subclass 6.2.1
|
||||
* CDC NCM NTB parameters structure, CDC NCM subclass 6.2.1
|
||||
*
|
||||
*/
|
||||
|
||||
struct usb_cdc_ncm_ntb_parameter {
|
||||
struct usb_cdc_ncm_ntb_parameters {
|
||||
__le16 wLength;
|
||||
__le16 bmNtbFormatSupported;
|
||||
__le16 bmNtbFormatsSupported;
|
||||
__le32 dwNtbInMaxSize;
|
||||
__le16 wNdpInDivisor;
|
||||
__le16 wNdpInPayloadRemainder;
|
||||
@@ -297,8 +299,8 @@ struct usb_cdc_ncm_ntb_parameter {
|
||||
* CDC NCM transfer headers, CDC NCM subclass 3.2
|
||||
*/
|
||||
|
||||
#define NCM_NTH16_SIGN 0x484D434E /* NCMH */
|
||||
#define NCM_NTH32_SIGN 0x686D636E /* ncmh */
|
||||
#define USB_CDC_NCM_NTH16_SIGN 0x484D434E /* NCMH */
|
||||
#define USB_CDC_NCM_NTH32_SIGN 0x686D636E /* ncmh */
|
||||
|
||||
struct usb_cdc_ncm_nth16 {
|
||||
__le32 dwSignature;
|
||||
@@ -320,25 +322,78 @@ struct usb_cdc_ncm_nth32 {
|
||||
* CDC NCM datagram pointers, CDC NCM subclass 3.3
|
||||
*/
|
||||
|
||||
#define NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */
|
||||
#define NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */
|
||||
#define NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */
|
||||
#define NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */
|
||||
#define USB_CDC_NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */
|
||||
#define USB_CDC_NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */
|
||||
#define USB_CDC_NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */
|
||||
#define USB_CDC_NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */
|
||||
|
||||
/* 16-bit NCM Datagram Pointer Entry */
|
||||
struct usb_cdc_ncm_dpe16 {
|
||||
__le16 wDatagramIndex;
|
||||
__le16 wDatagramLength;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* 16-bit NCM Datagram Pointer Table */
|
||||
struct usb_cdc_ncm_ndp16 {
|
||||
__le32 dwSignature;
|
||||
__le16 wLength;
|
||||
__le16 wNextFpIndex;
|
||||
__u8 data[0];
|
||||
struct usb_cdc_ncm_dpe16 dpe16[0];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* 32-bit NCM Datagram Pointer Entry */
|
||||
struct usb_cdc_ncm_dpe32 {
|
||||
__le32 dwDatagramIndex;
|
||||
__le32 dwDatagramLength;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* 32-bit NCM Datagram Pointer Table */
|
||||
struct usb_cdc_ncm_ndp32 {
|
||||
__le32 dwSignature;
|
||||
__le16 wLength;
|
||||
__le16 wReserved6;
|
||||
__le32 dwNextFpIndex;
|
||||
__le32 dwNextNdpIndex;
|
||||
__le32 dwReserved12;
|
||||
__u8 data[0];
|
||||
struct usb_cdc_ncm_dpe32 dpe32[0];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* CDC NCM subclass 3.2.1 and 3.2.2 */
|
||||
#define USB_CDC_NCM_NDP16_INDEX_MIN 0x000C
|
||||
#define USB_CDC_NCM_NDP32_INDEX_MIN 0x0010
|
||||
|
||||
/* CDC NCM subclass 3.3.3 Datagram Formatting */
|
||||
#define USB_CDC_NCM_DATAGRAM_FORMAT_CRC 0x30
|
||||
#define USB_CDC_NCM_DATAGRAM_FORMAT_NOCRC 0X31
|
||||
|
||||
/* CDC NCM subclass 4.2 NCM Communications Interface Protocol Code */
|
||||
#define USB_CDC_NCM_PROTO_CODE_NO_ENCAP_COMMANDS 0x00
|
||||
#define USB_CDC_NCM_PROTO_CODE_EXTERN_PROTO 0xFE
|
||||
|
||||
/* CDC NCM subclass 5.2.1 NCM Functional Descriptor, bmNetworkCapabilities */
|
||||
#define USB_CDC_NCM_NCAP_ETH_FILTER (1 << 0)
|
||||
#define USB_CDC_NCM_NCAP_NET_ADDRESS (1 << 1)
|
||||
#define USB_CDC_NCM_NCAP_ENCAP_COMMAND (1 << 2)
|
||||
#define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE (1 << 3)
|
||||
#define USB_CDC_NCM_NCAP_CRC_MODE (1 << 4)
|
||||
|
||||
/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
|
||||
#define USB_CDC_NCM_NTB16_SUPPORTED (1 << 0)
|
||||
#define USB_CDC_NCM_NTB32_SUPPORTED (1 << 1)
|
||||
|
||||
/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
|
||||
#define USB_CDC_NCM_NDP_ALIGN_MIN_SIZE 0x04
|
||||
#define USB_CDC_NCM_NTB_MAX_LENGTH 0x1C
|
||||
|
||||
/* CDC NCM subclass 6.2.5 SetNtbFormat */
|
||||
#define USB_CDC_NCM_NTB16_FORMAT 0x00
|
||||
#define USB_CDC_NCM_NTB32_FORMAT 0x01
|
||||
|
||||
/* CDC NCM subclass 6.2.7 SetNtbInputSize */
|
||||
#define USB_CDC_NCM_NTB_MIN_IN_SIZE 2048
|
||||
#define USB_CDC_NCM_NTB_MIN_OUT_SIZE 2048
|
||||
|
||||
/* CDC NCM subclass 6.2.11 SetCrcMode */
|
||||
#define USB_CDC_NCM_CRC_NOT_APPENDED 0x00
|
||||
#define USB_CDC_NCM_CRC_APPENDED 0x01
|
||||
|
||||
#endif /* __LINUX_USB_CDC_H */
|
||||
|
@@ -123,8 +123,23 @@
|
||||
#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */
|
||||
#define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */
|
||||
|
||||
/*
|
||||
* New Feature Selectors as added by USB 3.0
|
||||
* See USB 3.0 spec Table 9-6
|
||||
*/
|
||||
#define USB_DEVICE_U1_ENABLE 48 /* dev may initiate U1 transition */
|
||||
#define USB_DEVICE_U2_ENABLE 49 /* dev may initiate U2 transition */
|
||||
#define USB_DEVICE_LTM_ENABLE 50 /* dev may send LTM */
|
||||
#define USB_INTRF_FUNC_SUSPEND 0 /* function suspend */
|
||||
|
||||
#define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00
|
||||
|
||||
#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */
|
||||
|
||||
/* Bit array elements as returned by the USB_REQ_GET_STATUS request. */
|
||||
#define USB_DEV_STAT_U1_ENABLED 2 /* transition into U1 state */
|
||||
#define USB_DEV_STAT_U2_ENABLED 3 /* transition into U2 state */
|
||||
#define USB_DEV_STAT_LTM_ENABLED 4 /* Latency tolerance messages */
|
||||
|
||||
/**
|
||||
* struct usb_ctrlrequest - SETUP data for a USB device control request
|
||||
@@ -675,6 +690,7 @@ struct usb_bos_descriptor {
|
||||
__u8 bNumDeviceCaps;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define USB_DT_BOS_SIZE 5
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_DEVICE_CAPABILITY: grouped with BOS */
|
||||
@@ -712,16 +728,56 @@ struct usb_wireless_cap_descriptor { /* Ultra Wide Band */
|
||||
__u8 bReserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* USB 2.0 Extension descriptor */
|
||||
#define USB_CAP_TYPE_EXT 2
|
||||
|
||||
struct usb_ext_cap_descriptor { /* Link Power Management */
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bDevCapabilityType;
|
||||
__u8 bmAttributes;
|
||||
__le32 bmAttributes;
|
||||
#define USB_LPM_SUPPORT (1 << 1) /* supports LPM */
|
||||
} __attribute__((packed));
|
||||
|
||||
#define USB_DT_USB_EXT_CAP_SIZE 7
|
||||
|
||||
/*
|
||||
* SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB
|
||||
* specific device level capabilities
|
||||
*/
|
||||
#define USB_SS_CAP_TYPE 3
|
||||
struct usb_ss_cap_descriptor { /* Link Power Management */
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bDevCapabilityType;
|
||||
__u8 bmAttributes;
|
||||
#define USB_LTM_SUPPORT (1 << 1) /* supports LTM */
|
||||
__le16 wSpeedSupported;
|
||||
#define USB_LOW_SPEED_OPERATION (1) /* Low speed operation */
|
||||
#define USB_FULL_SPEED_OPERATION (1 << 1) /* Full speed operation */
|
||||
#define USB_HIGH_SPEED_OPERATION (1 << 2) /* High speed operation */
|
||||
#define USB_5GBPS_OPERATION (1 << 3) /* Operation at 5Gbps */
|
||||
__u8 bFunctionalitySupport;
|
||||
__u8 bU1devExitLat;
|
||||
__le16 bU2DevExitLat;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define USB_DT_USB_SS_CAP_SIZE 10
|
||||
|
||||
/*
|
||||
* Container ID Capability descriptor: Defines the instance unique ID used to
|
||||
* identify the instance across all operating modes
|
||||
*/
|
||||
#define CONTAINER_ID_TYPE 4
|
||||
struct usb_ss_container_id_descriptor {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__u8 bDevCapabilityType;
|
||||
__u8 bReserved;
|
||||
__u8 ContainerID[16]; /* 128-bit number */
|
||||
} __attribute__((packed));
|
||||
|
||||
#define USB_DT_USB_SS_CONTN_ID_SIZE 20
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with
|
||||
@@ -808,4 +864,14 @@ enum usb_device_state {
|
||||
*/
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* As per USB compliance update, a device that is actively drawing
|
||||
* more than 100mA from USB must report itself as bus-powered in
|
||||
* the GetStatus(DEVICE) call.
|
||||
* http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34
|
||||
*/
|
||||
#define USB_SELF_POWER_VBUS_MAX_DRAW 100
|
||||
|
||||
#endif /* __LINUX_USB_CH9_H */
|
||||
|
@@ -161,8 +161,6 @@ ep_choose(struct usb_gadget *g, struct usb_endpoint_descriptor *hs,
|
||||
* and by language IDs provided in control requests.
|
||||
* @descriptors: Table of descriptors preceding all function descriptors.
|
||||
* Examples include OTG and vendor-specific descriptors.
|
||||
* @bind: Called from @usb_add_config() to allocate resources unique to this
|
||||
* configuration and to call @usb_add_function() for each function used.
|
||||
* @unbind: Reverses @bind; called as a side effect of unregistering the
|
||||
* driver which added this configuration.
|
||||
* @setup: Used to delegate control requests that aren't handled by standard
|
||||
@@ -207,8 +205,7 @@ struct usb_configuration {
|
||||
* we can't restructure things to avoid mismatching...
|
||||
*/
|
||||
|
||||
/* configuration management: bind/unbind */
|
||||
int (*bind)(struct usb_configuration *);
|
||||
/* configuration management: unbind/setup */
|
||||
void (*unbind)(struct usb_configuration *);
|
||||
int (*setup)(struct usb_configuration *,
|
||||
const struct usb_ctrlrequest *);
|
||||
@@ -232,20 +229,24 @@ struct usb_configuration {
|
||||
};
|
||||
|
||||
int usb_add_config(struct usb_composite_dev *,
|
||||
struct usb_configuration *);
|
||||
struct usb_configuration *,
|
||||
int (*)(struct usb_configuration *));
|
||||
|
||||
/**
|
||||
* struct usb_composite_driver - groups configurations into a gadget
|
||||
* @name: For diagnostics, identifies the driver.
|
||||
* @iProduct: Used as iProduct override if @dev->iProduct is not set.
|
||||
* If NULL value of @name is taken.
|
||||
* @iManufacturer: Used as iManufacturer override if @dev->iManufacturer is
|
||||
* not set. If NULL a default "<system> <release> with <udc>" value
|
||||
* will be used.
|
||||
* @dev: Template descriptor for the device, including default device
|
||||
* identifiers.
|
||||
* @strings: tables of strings, keyed by identifiers assigned during bind()
|
||||
* and language IDs provided in control requests
|
||||
* @bind: (REQUIRED) Used to allocate resources that are shared across the
|
||||
* whole device, such as string IDs, and add its configurations using
|
||||
* @usb_add_config(). This may fail by returning a negative errno
|
||||
* value; it should return zero on successful initialization.
|
||||
* @unbind: Reverses @bind(); called as a side effect of unregistering
|
||||
* @needs_serial: set to 1 if the gadget needs userspace to provide
|
||||
* a serial number. If one is not provided, warning will be printed.
|
||||
* @unbind: Reverses bind; called as a side effect of unregistering
|
||||
* this driver.
|
||||
* @disconnect: optional driver disconnect method
|
||||
* @suspend: Notifies when the host stops sending USB traffic,
|
||||
@@ -256,7 +257,7 @@ int usb_add_config(struct usb_composite_dev *,
|
||||
* Devices default to reporting self powered operation. Devices which rely
|
||||
* on bus powered operation should report this in their @bind() method.
|
||||
*
|
||||
* Before returning from @bind, various fields in the template descriptor
|
||||
* Before returning from bind, various fields in the template descriptor
|
||||
* may be overridden. These include the idVendor/idProduct/bcdDevice values
|
||||
* normally to bind the appropriate host side driver, and the three strings
|
||||
* (iManufacturer, iProduct, iSerialNumber) normally used to provide user
|
||||
@@ -266,15 +267,12 @@ int usb_add_config(struct usb_composite_dev *,
|
||||
*/
|
||||
struct usb_composite_driver {
|
||||
const char *name;
|
||||
const char *iProduct;
|
||||
const char *iManufacturer;
|
||||
const struct usb_device_descriptor *dev;
|
||||
struct usb_gadget_strings **strings;
|
||||
unsigned needs_serial:1;
|
||||
|
||||
/* REVISIT: bind() functions can be marked __init, which
|
||||
* makes trouble for section mismatch analysis. See if
|
||||
* we can't restructure things to avoid mismatching...
|
||||
*/
|
||||
|
||||
int (*bind)(struct usb_composite_dev *);
|
||||
int (*unbind)(struct usb_composite_dev *);
|
||||
|
||||
void (*disconnect)(struct usb_composite_dev *);
|
||||
@@ -284,8 +282,9 @@ struct usb_composite_driver {
|
||||
void (*resume)(struct usb_composite_dev *);
|
||||
};
|
||||
|
||||
extern int usb_composite_register(struct usb_composite_driver *);
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *);
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver,
|
||||
int (*bind)(struct usb_composite_dev *cdev));
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *driver);
|
||||
|
||||
|
||||
/**
|
||||
@@ -334,6 +333,9 @@ struct usb_composite_dev {
|
||||
struct list_head configs;
|
||||
struct usb_composite_driver *driver;
|
||||
u8 next_string_id;
|
||||
u8 manufacturer_override;
|
||||
u8 product_override;
|
||||
u8 serial_override;
|
||||
|
||||
/* the gadget driver won't enable the data pullup
|
||||
* while the deactivation count is nonzero.
|
||||
|
@@ -705,11 +705,6 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget)
|
||||
* struct usb_gadget_driver - driver for usb 'slave' devices
|
||||
* @function: String describing the gadget's function
|
||||
* @speed: Highest speed the driver handles.
|
||||
* @bind: Invoked when the driver is bound to a gadget, usually
|
||||
* after registering the driver.
|
||||
* At that point, ep0 is fully initialized, and ep_list holds
|
||||
* the currently-available endpoints.
|
||||
* Called in a context that permits sleeping.
|
||||
* @setup: Invoked for ep0 control requests that aren't handled by
|
||||
* the hardware level driver. Most calls must be handled by
|
||||
* the gadget driver, including descriptor and configuration
|
||||
@@ -774,7 +769,6 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget)
|
||||
struct usb_gadget_driver {
|
||||
char *function;
|
||||
enum usb_device_speed speed;
|
||||
int (*bind)(struct usb_gadget *);
|
||||
void (*unbind)(struct usb_gadget *);
|
||||
int (*setup)(struct usb_gadget *,
|
||||
const struct usb_ctrlrequest *);
|
||||
@@ -798,17 +792,19 @@ struct usb_gadget_driver {
|
||||
*/
|
||||
|
||||
/**
|
||||
* usb_gadget_register_driver - register a gadget driver
|
||||
* @driver:the driver being registered
|
||||
* usb_gadget_probe_driver - probe a gadget driver
|
||||
* @driver: the driver being registered
|
||||
* @bind: the driver's bind callback
|
||||
* Context: can sleep
|
||||
*
|
||||
* Call this in your gadget driver's module initialization function,
|
||||
* to tell the underlying usb controller driver about your driver.
|
||||
* The driver's bind() function will be called to bind it to a
|
||||
* gadget before this registration call returns. It's expected that
|
||||
* the bind() functions will be in init sections.
|
||||
* The @bind() function will be called to bind it to a gadget before this
|
||||
* registration call returns. It's expected that the @bind() function will
|
||||
* be in init sections.
|
||||
*/
|
||||
int usb_gadget_register_driver(struct usb_gadget_driver *driver);
|
||||
int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
|
||||
int (*bind)(struct usb_gadget *));
|
||||
|
||||
/**
|
||||
* usb_gadget_unregister_driver - unregister a gadget driver
|
||||
|
@@ -329,6 +329,8 @@ extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags);
|
||||
extern int usb_hcd_unlink_urb(struct urb *urb, int status);
|
||||
extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb,
|
||||
int status);
|
||||
extern void unmap_urb_setup_for_dma(struct usb_hcd *, struct urb *);
|
||||
extern void unmap_urb_for_dma(struct usb_hcd *, struct urb *);
|
||||
extern void usb_hcd_flush_endpoint(struct usb_device *udev,
|
||||
struct usb_host_endpoint *ep);
|
||||
extern void usb_hcd_disable_endpoint(struct usb_device *udev,
|
||||
|
180
include/linux/usb/intel_mid_otg.h
Normal file
180
include/linux/usb/intel_mid_otg.h
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* Intel MID (Langwell/Penwell) USB OTG Transceiver driver
|
||||
* Copyright (C) 2008 - 2010, Intel Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __INTEL_MID_OTG_H
|
||||
#define __INTEL_MID_OTG_H
|
||||
|
||||
#include <linux/pm.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
struct intel_mid_otg_xceiv;
|
||||
|
||||
/* This is a common data structure for Intel MID platform to
|
||||
* save values of the OTG state machine */
|
||||
struct otg_hsm {
|
||||
/* Input */
|
||||
int a_bus_resume;
|
||||
int a_bus_suspend;
|
||||
int a_conn;
|
||||
int a_sess_vld;
|
||||
int a_srp_det;
|
||||
int a_vbus_vld;
|
||||
int b_bus_resume;
|
||||
int b_bus_suspend;
|
||||
int b_conn;
|
||||
int b_se0_srp;
|
||||
int b_ssend_srp;
|
||||
int b_sess_end;
|
||||
int b_sess_vld;
|
||||
int id;
|
||||
/* id values */
|
||||
#define ID_B 0x05
|
||||
#define ID_A 0x04
|
||||
#define ID_ACA_C 0x03
|
||||
#define ID_ACA_B 0x02
|
||||
#define ID_ACA_A 0x01
|
||||
int power_up;
|
||||
int adp_change;
|
||||
int test_device;
|
||||
|
||||
/* Internal variables */
|
||||
int a_set_b_hnp_en;
|
||||
int b_srp_done;
|
||||
int b_hnp_enable;
|
||||
int hnp_poll_enable;
|
||||
|
||||
/* Timeout indicator for timers */
|
||||
int a_wait_vrise_tmout;
|
||||
int a_wait_bcon_tmout;
|
||||
int a_aidl_bdis_tmout;
|
||||
int a_bidl_adis_tmout;
|
||||
int a_bidl_adis_tmr;
|
||||
int a_wait_vfall_tmout;
|
||||
int b_ase0_brst_tmout;
|
||||
int b_bus_suspend_tmout;
|
||||
int b_srp_init_tmout;
|
||||
int b_srp_fail_tmout;
|
||||
int b_srp_fail_tmr;
|
||||
int b_adp_sense_tmout;
|
||||
|
||||
/* Informative variables */
|
||||
int a_bus_drop;
|
||||
int a_bus_req;
|
||||
int a_clr_err;
|
||||
int b_bus_req;
|
||||
int a_suspend_req;
|
||||
int b_bus_suspend_vld;
|
||||
|
||||
/* Output */
|
||||
int drv_vbus;
|
||||
int loc_conn;
|
||||
int loc_sof;
|
||||
|
||||
/* Others */
|
||||
int vbus_srp_up;
|
||||
};
|
||||
|
||||
/* must provide ULPI access function to read/write registers implemented in
|
||||
* ULPI address space */
|
||||
struct iotg_ulpi_access_ops {
|
||||
int (*read)(struct intel_mid_otg_xceiv *iotg, u8 reg, u8 *val);
|
||||
int (*write)(struct intel_mid_otg_xceiv *iotg, u8 reg, u8 val);
|
||||
};
|
||||
|
||||
#define OTG_A_DEVICE 0x0
|
||||
#define OTG_B_DEVICE 0x1
|
||||
|
||||
/*
|
||||
* the Intel MID (Langwell/Penwell) otg transceiver driver needs to interact
|
||||
* with device and host drivers to implement the USB OTG related feature. More
|
||||
* function members are added based on otg_transceiver data structure for this
|
||||
* purpose.
|
||||
*/
|
||||
struct intel_mid_otg_xceiv {
|
||||
struct otg_transceiver otg;
|
||||
struct otg_hsm hsm;
|
||||
|
||||
/* base address */
|
||||
void __iomem *base;
|
||||
|
||||
/* ops to access ulpi */
|
||||
struct iotg_ulpi_access_ops ulpi_ops;
|
||||
|
||||
/* atomic notifier for interrupt context */
|
||||
struct atomic_notifier_head iotg_notifier;
|
||||
|
||||
/* start/stop USB Host function */
|
||||
int (*start_host)(struct intel_mid_otg_xceiv *iotg);
|
||||
int (*stop_host)(struct intel_mid_otg_xceiv *iotg);
|
||||
|
||||
/* start/stop USB Peripheral function */
|
||||
int (*start_peripheral)(struct intel_mid_otg_xceiv *iotg);
|
||||
int (*stop_peripheral)(struct intel_mid_otg_xceiv *iotg);
|
||||
|
||||
/* start/stop ADP sense/probe function */
|
||||
int (*set_adp_probe)(struct intel_mid_otg_xceiv *iotg,
|
||||
bool enabled, int dev);
|
||||
int (*set_adp_sense)(struct intel_mid_otg_xceiv *iotg,
|
||||
bool enabled);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* suspend/resume USB host function */
|
||||
int (*suspend_host)(struct intel_mid_otg_xceiv *iotg,
|
||||
pm_message_t message);
|
||||
int (*resume_host)(struct intel_mid_otg_xceiv *iotg);
|
||||
|
||||
int (*suspend_peripheral)(struct intel_mid_otg_xceiv *iotg,
|
||||
pm_message_t message);
|
||||
int (*resume_peripheral)(struct intel_mid_otg_xceiv *iotg);
|
||||
#endif
|
||||
|
||||
};
|
||||
static inline
|
||||
struct intel_mid_otg_xceiv *otg_to_mid_xceiv(struct otg_transceiver *otg)
|
||||
{
|
||||
return container_of(otg, struct intel_mid_otg_xceiv, otg);
|
||||
}
|
||||
|
||||
#define MID_OTG_NOTIFY_CONNECT 0x0001
|
||||
#define MID_OTG_NOTIFY_DISCONN 0x0002
|
||||
#define MID_OTG_NOTIFY_HSUSPEND 0x0003
|
||||
#define MID_OTG_NOTIFY_HRESUME 0x0004
|
||||
#define MID_OTG_NOTIFY_CSUSPEND 0x0005
|
||||
#define MID_OTG_NOTIFY_CRESUME 0x0006
|
||||
#define MID_OTG_NOTIFY_HOSTADD 0x0007
|
||||
#define MID_OTG_NOTIFY_HOSTREMOVE 0x0008
|
||||
#define MID_OTG_NOTIFY_CLIENTADD 0x0009
|
||||
#define MID_OTG_NOTIFY_CLIENTREMOVE 0x000a
|
||||
|
||||
static inline int
|
||||
intel_mid_otg_register_notifier(struct intel_mid_otg_xceiv *iotg,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_register(&iotg->iotg_notifier, nb);
|
||||
}
|
||||
|
||||
static inline void
|
||||
intel_mid_otg_unregister_notifier(struct intel_mid_otg_xceiv *iotg,
|
||||
struct notifier_block *nb)
|
||||
{
|
||||
atomic_notifier_chain_unregister(&iotg->iotg_notifier, nb);
|
||||
}
|
||||
|
||||
#endif /* __INTEL_MID_OTG_H */
|
139
include/linux/usb/langwell_otg.h
Normal file
139
include/linux/usb/langwell_otg.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Intel Langwell USB OTG transceiver driver
|
||||
* Copyright (C) 2008 - 2010, Intel Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LANGWELL_OTG_H
|
||||
#define __LANGWELL_OTG_H
|
||||
|
||||
#include <linux/usb/intel_mid_otg.h>
|
||||
|
||||
#define CI_USBCMD 0x30
|
||||
# define USBCMD_RST BIT(1)
|
||||
# define USBCMD_RS BIT(0)
|
||||
#define CI_USBSTS 0x34
|
||||
# define USBSTS_SLI BIT(8)
|
||||
# define USBSTS_URI BIT(6)
|
||||
# define USBSTS_PCI BIT(2)
|
||||
#define CI_PORTSC1 0x74
|
||||
# define PORTSC_PP BIT(12)
|
||||
# define PORTSC_LS (BIT(11) | BIT(10))
|
||||
# define PORTSC_SUSP BIT(7)
|
||||
# define PORTSC_CCS BIT(0)
|
||||
#define CI_HOSTPC1 0xb4
|
||||
# define HOSTPC1_PHCD BIT(22)
|
||||
#define CI_OTGSC 0xf4
|
||||
# define OTGSC_DPIE BIT(30)
|
||||
# define OTGSC_1MSE BIT(29)
|
||||
# define OTGSC_BSEIE BIT(28)
|
||||
# define OTGSC_BSVIE BIT(27)
|
||||
# define OTGSC_ASVIE BIT(26)
|
||||
# define OTGSC_AVVIE BIT(25)
|
||||
# define OTGSC_IDIE BIT(24)
|
||||
# define OTGSC_DPIS BIT(22)
|
||||
# define OTGSC_1MSS BIT(21)
|
||||
# define OTGSC_BSEIS BIT(20)
|
||||
# define OTGSC_BSVIS BIT(19)
|
||||
# define OTGSC_ASVIS BIT(18)
|
||||
# define OTGSC_AVVIS BIT(17)
|
||||
# define OTGSC_IDIS BIT(16)
|
||||
# define OTGSC_DPS BIT(14)
|
||||
# define OTGSC_1MST BIT(13)
|
||||
# define OTGSC_BSE BIT(12)
|
||||
# define OTGSC_BSV BIT(11)
|
||||
# define OTGSC_ASV BIT(10)
|
||||
# define OTGSC_AVV BIT(9)
|
||||
# define OTGSC_ID BIT(8)
|
||||
# define OTGSC_HABA BIT(7)
|
||||
# define OTGSC_HADP BIT(6)
|
||||
# define OTGSC_IDPU BIT(5)
|
||||
# define OTGSC_DP BIT(4)
|
||||
# define OTGSC_OT BIT(3)
|
||||
# define OTGSC_HAAR BIT(2)
|
||||
# define OTGSC_VC BIT(1)
|
||||
# define OTGSC_VD BIT(0)
|
||||
# define OTGSC_INTEN_MASK (0x7f << 24)
|
||||
# define OTGSC_INT_MASK (0x5f << 24)
|
||||
# define OTGSC_INTSTS_MASK (0x7f << 16)
|
||||
#define CI_USBMODE 0xf8
|
||||
# define USBMODE_CM (BIT(1) | BIT(0))
|
||||
# define USBMODE_IDLE 0
|
||||
# define USBMODE_DEVICE 0x2
|
||||
# define USBMODE_HOST 0x3
|
||||
#define USBCFG_ADDR 0xff10801c
|
||||
#define USBCFG_LEN 4
|
||||
# define USBCFG_VBUSVAL BIT(14)
|
||||
# define USBCFG_AVALID BIT(13)
|
||||
# define USBCFG_BVALID BIT(12)
|
||||
# define USBCFG_SESEND BIT(11)
|
||||
|
||||
#define INTR_DUMMY_MASK (USBSTS_SLI | USBSTS_URI | USBSTS_PCI)
|
||||
|
||||
enum langwell_otg_timer_type {
|
||||
TA_WAIT_VRISE_TMR,
|
||||
TA_WAIT_BCON_TMR,
|
||||
TA_AIDL_BDIS_TMR,
|
||||
TB_ASE0_BRST_TMR,
|
||||
TB_SE0_SRP_TMR,
|
||||
TB_SRP_INIT_TMR,
|
||||
TB_SRP_FAIL_TMR,
|
||||
TB_BUS_SUSPEND_TMR
|
||||
};
|
||||
|
||||
#define TA_WAIT_VRISE 100
|
||||
#define TA_WAIT_BCON 30000
|
||||
#define TA_AIDL_BDIS 15000
|
||||
#define TB_ASE0_BRST 5000
|
||||
#define TB_SE0_SRP 2
|
||||
#define TB_SRP_INIT 100
|
||||
#define TB_SRP_FAIL 5500
|
||||
#define TB_BUS_SUSPEND 500
|
||||
|
||||
struct langwell_otg_timer {
|
||||
unsigned long expires; /* Number of count increase to timeout */
|
||||
unsigned long count; /* Tick counter */
|
||||
void (*function)(unsigned long); /* Timeout function */
|
||||
unsigned long data; /* Data passed to function */
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct langwell_otg {
|
||||
struct intel_mid_otg_xceiv iotg;
|
||||
struct device *dev;
|
||||
|
||||
void __iomem *usbcfg; /* SCCBUSB config Reg */
|
||||
|
||||
unsigned region;
|
||||
unsigned cfg_region;
|
||||
|
||||
struct work_struct work;
|
||||
struct workqueue_struct *qwork;
|
||||
struct timer_list hsm_timer;
|
||||
|
||||
spinlock_t lock;
|
||||
spinlock_t wq_lock;
|
||||
|
||||
struct notifier_block iotg_notifier;
|
||||
};
|
||||
|
||||
static inline
|
||||
struct langwell_otg *mid_xceiv_to_lnw(struct intel_mid_otg_xceiv *iotg)
|
||||
{
|
||||
return container_of(iotg, struct langwell_otg, iotg);
|
||||
}
|
||||
|
||||
#endif /* __LANGWELL_OTG_H__ */
|
@@ -1,114 +0,0 @@
|
||||
/*
|
||||
* USB CDC NCM auxiliary definitions
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_NCM_H
|
||||
#define __LINUX_USB_NCM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/usb/cdc.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define NCM_NTB_MIN_IN_SIZE 2048
|
||||
#define NCM_NTB_MIN_OUT_SIZE 2048
|
||||
|
||||
#define NCM_CONTROL_TIMEOUT (5 * 1000)
|
||||
|
||||
/* bmNetworkCapabilities */
|
||||
|
||||
#define NCM_NCAP_ETH_FILTER (1 << 0)
|
||||
#define NCM_NCAP_NET_ADDRESS (1 << 1)
|
||||
#define NCM_NCAP_ENCAP_COMM (1 << 2)
|
||||
#define NCM_NCAP_MAX_DGRAM (1 << 3)
|
||||
#define NCM_NCAP_CRC_MODE (1 << 4)
|
||||
|
||||
/*
|
||||
* Here are options for NCM Datagram Pointer table (NDP) parser.
|
||||
* There are 2 different formats: NDP16 and NDP32 in the spec (ch. 3),
|
||||
* in NDP16 offsets and sizes fields are 1 16bit word wide,
|
||||
* in NDP32 -- 2 16bit words wide. Also signatures are different.
|
||||
* To make the parser code the same, put the differences in the structure,
|
||||
* and switch pointers to the structures when the format is changed.
|
||||
*/
|
||||
|
||||
struct ndp_parser_opts {
|
||||
u32 nth_sign;
|
||||
u32 ndp_sign;
|
||||
unsigned nth_size;
|
||||
unsigned ndp_size;
|
||||
unsigned ndplen_align;
|
||||
/* sizes in u16 units */
|
||||
unsigned dgram_item_len; /* index or length */
|
||||
unsigned block_length;
|
||||
unsigned fp_index;
|
||||
unsigned reserved1;
|
||||
unsigned reserved2;
|
||||
unsigned next_fp_index;
|
||||
};
|
||||
|
||||
#define INIT_NDP16_OPTS { \
|
||||
.nth_sign = NCM_NTH16_SIGN, \
|
||||
.ndp_sign = NCM_NDP16_NOCRC_SIGN, \
|
||||
.nth_size = sizeof(struct usb_cdc_ncm_nth16), \
|
||||
.ndp_size = sizeof(struct usb_cdc_ncm_ndp16), \
|
||||
.ndplen_align = 4, \
|
||||
.dgram_item_len = 1, \
|
||||
.block_length = 1, \
|
||||
.fp_index = 1, \
|
||||
.reserved1 = 0, \
|
||||
.reserved2 = 0, \
|
||||
.next_fp_index = 1, \
|
||||
}
|
||||
|
||||
|
||||
#define INIT_NDP32_OPTS { \
|
||||
.nth_sign = NCM_NTH32_SIGN, \
|
||||
.ndp_sign = NCM_NDP32_NOCRC_SIGN, \
|
||||
.nth_size = sizeof(struct usb_cdc_ncm_nth32), \
|
||||
.ndp_size = sizeof(struct usb_cdc_ncm_ndp32), \
|
||||
.ndplen_align = 8, \
|
||||
.dgram_item_len = 2, \
|
||||
.block_length = 2, \
|
||||
.fp_index = 2, \
|
||||
.reserved1 = 1, \
|
||||
.reserved2 = 2, \
|
||||
.next_fp_index = 2, \
|
||||
}
|
||||
|
||||
static inline void put_ncm(__le16 **p, unsigned size, unsigned val)
|
||||
{
|
||||
switch (size) {
|
||||
case 1:
|
||||
put_unaligned_le16((u16)val, *p);
|
||||
break;
|
||||
case 2:
|
||||
put_unaligned_le32((u32)val, *p);
|
||||
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
*p += size;
|
||||
}
|
||||
|
||||
static inline unsigned get_ncm(__le16 **p, unsigned size)
|
||||
{
|
||||
unsigned tmp;
|
||||
|
||||
switch (size) {
|
||||
case 1:
|
||||
tmp = get_unaligned_le16(*p);
|
||||
break;
|
||||
case 2:
|
||||
tmp = get_unaligned_le32(*p);
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
*p += size;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#endif /* __LINUX_USB_NCM_H */
|
@@ -164,8 +164,19 @@ otg_shutdown(struct otg_transceiver *otg)
|
||||
}
|
||||
|
||||
/* for usb host and peripheral controller drivers */
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
extern struct otg_transceiver *otg_get_transceiver(void);
|
||||
extern void otg_put_transceiver(struct otg_transceiver *);
|
||||
#else
|
||||
static inline struct otg_transceiver *otg_get_transceiver(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void otg_put_transceiver(struct otg_transceiver *x)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Context: can sleep */
|
||||
static inline int
|
||||
|
48
include/linux/usb/storage.h
Normal file
48
include/linux/usb/storage.h
Normal file
@@ -0,0 +1,48 @@
|
||||
#ifndef __LINUX_USB_STORAGE_H
|
||||
#define __LINUX_USB_STORAGE_H
|
||||
|
||||
/*
|
||||
* linux/usb/storage.h
|
||||
*
|
||||
* Copyright Matthew Wilcox for Intel Corp, 2010
|
||||
*
|
||||
* This file contains definitions taken from the
|
||||
* USB Mass Storage Class Specification Overview
|
||||
*
|
||||
* Distributed under the terms of the GNU GPL, version two.
|
||||
*/
|
||||
|
||||
/* Storage subclass codes */
|
||||
|
||||
#define USB_SC_RBC 0x01 /* Typically, flash devices */
|
||||
#define USB_SC_8020 0x02 /* CD-ROM */
|
||||
#define USB_SC_QIC 0x03 /* QIC-157 Tapes */
|
||||
#define USB_SC_UFI 0x04 /* Floppy */
|
||||
#define USB_SC_8070 0x05 /* Removable media */
|
||||
#define USB_SC_SCSI 0x06 /* Transparent */
|
||||
#define USB_SC_LOCKABLE 0x07 /* Password-protected */
|
||||
|
||||
#define USB_SC_ISD200 0xf0 /* ISD200 ATA */
|
||||
#define USB_SC_CYP_ATACB 0xf1 /* Cypress ATACB */
|
||||
#define USB_SC_DEVICE 0xff /* Use device's value */
|
||||
|
||||
/* Storage protocol codes */
|
||||
|
||||
#define USB_PR_CBI 0x00 /* Control/Bulk/Interrupt */
|
||||
#define USB_PR_CB 0x01 /* Control/Bulk w/o interrupt */
|
||||
#define USB_PR_BULK 0x50 /* bulk only */
|
||||
#define USB_PR_UAS 0x62 /* USB Attached SCSI */
|
||||
|
||||
#define USB_PR_USBAT 0x80 /* SCM-ATAPI bridge */
|
||||
#define USB_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */
|
||||
#define USB_PR_SDDR55 0x82 /* SDDR-55 (made up) */
|
||||
#define USB_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */
|
||||
#define USB_PR_FREECOM 0xf1 /* Freecom */
|
||||
#define USB_PR_DATAFAB 0xf2 /* Datafab chipsets */
|
||||
#define USB_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */
|
||||
#define USB_PR_ALAUDA 0xf4 /* Alauda chipsets */
|
||||
#define USB_PR_KARMA 0xf5 /* Rio Karma */
|
||||
|
||||
#define USB_PR_DEVICE 0xff /* Use device's value */
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user