usb: gadget: Add HSIC Peripheral over SPS support

Add support in HSIC peripheral(device)
over SPS.
Only one USB core can be use - currently HSUSB
is enabled by default.
To enable HSIC core defconfig file should be changed.

Change-Id: I256aecd9e6dfd8bfd71719c32beed8b24225e11c
Signed-off-by: Ofir Cohen <ofirc@codeaurora.org>
This commit is contained in:
Ofir Cohen
2012-01-26 16:49:17 +02:00
parent 1a8e8dff34
commit 010009b830
4 changed files with 45 additions and 10 deletions

View File

@@ -102,7 +102,9 @@ struct platform_device msm9615_device_dmov = {
}; };
#define MSM_USB_BAM_BASE 0x12502000 #define MSM_USB_BAM_BASE 0x12502000
#define MSM_USB_BAM_SIZE 0x3DFFF #define MSM_USB_BAM_SIZE SZ_16K
#define MSM_HSIC_BAM_BASE 0x12542000
#define MSM_HSIC_BAM_SIZE SZ_16K
static struct resource resources_otg[] = { static struct resource resources_otg[] = {
{ {
@@ -144,7 +146,7 @@ static struct resource resources_usb_bam[] = {
{ {
.name = "usb_bam_addr", .name = "usb_bam_addr",
.start = MSM_USB_BAM_BASE, .start = MSM_USB_BAM_BASE,
.end = MSM_USB_BAM_BASE + MSM_USB_BAM_SIZE, .end = MSM_USB_BAM_BASE + MSM_USB_BAM_SIZE - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
{ {
@@ -153,6 +155,18 @@ static struct resource resources_usb_bam[] = {
.end = USB1_HS_BAM_IRQ, .end = USB1_HS_BAM_IRQ,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
{
.name = "hsic_bam_addr",
.start = MSM_HSIC_BAM_BASE,
.end = MSM_HSIC_BAM_BASE + MSM_HSIC_BAM_SIZE - 1,
.flags = IORESOURCE_MEM,
},
{
.name = "hsic_bam_irq",
.start = USB_HSIC_BAM_IRQ,
.end = USB_HSIC_BAM_IRQ,
.flags = IORESOURCE_IRQ,
},
}; };
struct platform_device msm_device_usb_bam = { struct platform_device msm_device_usb_bam = {

View File

@@ -179,6 +179,7 @@
#define TLMM_MSM_DIR_CONN_IRQ_21 (GIC_SPI_START + 224) #define TLMM_MSM_DIR_CONN_IRQ_21 (GIC_SPI_START + 224)
#define MSM_SPARE0_IRQ (GIC_SPI_START + 225) #define MSM_SPARE0_IRQ (GIC_SPI_START + 225)
#define PMIC_SEC_IRQ_N (GIC_SPI_START + 226) #define PMIC_SEC_IRQ_N (GIC_SPI_START + 226)
#define USB_HSIC_BAM_IRQ (GIC_SPI_START + 231)
#define USB_HSIC_IRQ (GIC_SPI_START + 232) #define USB_HSIC_IRQ (GIC_SPI_START + 232)
#define NR_MSM_IRQS 288 #define NR_MSM_IRQS 288

View File

@@ -170,20 +170,34 @@ static int usb_bam_init(void)
struct msm_usb_bam_platform_data *pdata = struct msm_usb_bam_platform_data *pdata =
(struct msm_usb_bam_platform_data *) (struct msm_usb_bam_platform_data *)
(usb_bam_pdev->dev.platform_data); (usb_bam_pdev->dev.platform_data);
struct resource *res;
int irq;
usb_virt_addr = ioremap_nocache( res = platform_get_resource(usb_bam_pdev, IORESOURCE_MEM,
pdata->usb_bam_phy_base, pdata->usb_active_bam);
pdata->usb_bam_phy_size); if (!res) {
dev_err(&usb_bam_pdev->dev, "Unable to get memory resource\n");
return -ENODEV;
}
irq = platform_get_irq(usb_bam_pdev, pdata->usb_active_bam);
if (irq < 0) {
dev_err(&usb_bam_pdev->dev, "Unable to get IRQ resource\n");
return irq;
}
usb_virt_addr = ioremap(res->start, resource_size(res));
if (!usb_virt_addr) { if (!usb_virt_addr) {
pr_err("%s: ioremap failed\n", __func__); pr_err("%s: ioremap failed\n", __func__);
return -ENOMEM; return -ENOMEM;
} }
usb_props.phys_addr = pdata->usb_bam_phy_base; usb_props.phys_addr = res->start;
usb_props.virt_addr = usb_virt_addr; usb_props.virt_addr = usb_virt_addr;
usb_props.virt_size = pdata->usb_bam_phy_size; usb_props.virt_size = resource_size(res);
usb_props.irq = USB1_HS_BAM_IRQ; usb_props.irq = irq;
usb_props.num_pipes = pdata->usb_bam_num_pipes;
usb_props.summing_threshold = USB_SUMMING_THRESHOLD; usb_props.summing_threshold = USB_SUMMING_THRESHOLD;
usb_props.num_pipes = pdata->usb_bam_num_pipes;
ret = sps_register_bam_device(&usb_props, &h_usb); ret = sps_register_bam_device(&usb_props, &h_usb);
if (ret < 0) { if (ret < 0) {
pr_err("%s: register bam error %d\n", __func__, ret); pr_err("%s: register bam error %d\n", __func__, ret);
@@ -210,7 +224,7 @@ static int usb_bam_probe(struct platform_device *pdev)
ret = usb_bam_init(); ret = usb_bam_init();
if (ret) { if (ret) {
dev_err(&pdev->dev, "failed to get platform resource mem\n"); dev_err(&pdev->dev, "failed to initialize usb bam\n");
return ret; return ret;
} }

View File

@@ -288,6 +288,12 @@ struct msm_usb_bam_platform_data {
struct usb_bam_pipe_connect *connections; struct usb_bam_pipe_connect *connections;
unsigned long usb_bam_phy_base; unsigned long usb_bam_phy_base;
unsigned long usb_bam_phy_size; unsigned long usb_bam_phy_size;
int usb_active_bam;
int usb_bam_num_pipes; int usb_bam_num_pipes;
}; };
enum usb_bam {
HSUSB_BAM = 0,
HSIC_BAM,
};
#endif #endif