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:
@@ -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 = {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user