#include <linux/module.h>
#include <linux/usb.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/dma-mapping.h>
#include <linux/mmc/host.h>
enum ushc_request { … };
enum ushc_request_type { … };
#define USHC_GET_CAPS_VERSION_MASK …
#define USHC_GET_CAPS_3V3 …
#define USHC_GET_CAPS_3V0 …
#define USHC_GET_CAPS_1V8 …
#define USHC_GET_CAPS_HIGH_SPD …
#define USHC_HOST_CTRL_4BIT …
#define USHC_HOST_CTRL_HIGH_SPD …
#define USHC_PWR_CTRL_OFF …
#define USHC_PWR_CTRL_3V3 …
#define USHC_PWR_CTRL_3V0 …
#define USHC_PWR_CTRL_1V8 …
#define USHC_READ_RESP_BUSY …
#define USHC_READ_RESP_ERR_TIMEOUT …
#define USHC_READ_RESP_ERR_CRC …
#define USHC_READ_RESP_ERR_DAT …
#define USHC_READ_RESP_ERR_CMD …
#define USHC_READ_RESP_ERR_MASK …
struct ushc_cbw { … } __attribute__((packed));
#define USHC_CBW_SIGNATURE …
struct ushc_csw { … } __attribute__((packed));
#define USHC_CSW_SIGNATURE …
struct ushc_int_data { … };
#define USHC_INT_STATUS_SDIO_INT …
#define USHC_INT_STATUS_CARD_PRESENT …
struct ushc_data { … };
#define DISCONNECTED …
#define INT_EN …
#define IGNORE_NEXT_INT …
static void data_callback(struct urb *urb);
static int ushc_hw_reset(struct ushc_data *ushc)
{ … }
static int ushc_hw_get_caps(struct ushc_data *ushc)
{ … }
static int ushc_hw_set_host_ctrl(struct ushc_data *ushc, u16 mask, u16 val)
{ … }
static void int_callback(struct urb *urb)
{ … }
static void cbw_callback(struct urb *urb)
{ … }
static void data_callback(struct urb *urb)
{ … }
static void csw_callback(struct urb *urb)
{ … }
static void ushc_request(struct mmc_host *mmc, struct mmc_request *req)
{ … }
static int ushc_set_power(struct ushc_data *ushc, unsigned char power_mode)
{ … }
static int ushc_set_bus_width(struct ushc_data *ushc, int bus_width)
{ … }
static int ushc_set_bus_freq(struct ushc_data *ushc, int clk, bool enable_hs)
{ … }
static void ushc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{ … }
static int ushc_get_cd(struct mmc_host *mmc)
{ … }
static void ushc_enable_sdio_irq(struct mmc_host *mmc, int enable)
{ … }
static void ushc_clean_up(struct ushc_data *ushc)
{ … }
static const struct mmc_host_ops ushc_ops = …;
static int ushc_probe(struct usb_interface *intf, const struct usb_device_id *id)
{ … }
static void ushc_disconnect(struct usb_interface *intf)
{ … }
static struct usb_device_id ushc_id_table[] = …;
MODULE_DEVICE_TABLE(usb, ushc_id_table);
static struct usb_driver ushc_driver = …;
module_usb_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;