Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 317001
b: refs/heads/master
c: cbc6dc2
h: refs/heads/master
i:
  316999: 6f17f7a
v: v3
  • Loading branch information
Richard Zhao authored and Greg Kroah-Hartman committed Jul 9, 2012
1 parent bf43850 commit 6798d77
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 56 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 26c696c678c4ce180599330999e895cded0f625b
refs/heads/master: cbc6dc2af39e1395564445fd71cfcc1c70a96277
34 changes: 7 additions & 27 deletions trunk/drivers/usb/chipidea/ci13xxx_msm.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,51 +58,31 @@ static struct ci13xxx_platform_data ci13xxx_msm_platdata = {
static int __devinit ci13xxx_msm_probe(struct platform_device *pdev)
{
struct platform_device *plat_ci;
int ret;

dev_dbg(&pdev->dev, "ci13xxx_msm_probe\n");

plat_ci = platform_device_alloc("ci_hdrc", -1);
if (!plat_ci) {
dev_err(&pdev->dev, "can't allocate ci_hdrc platform device\n");
return -ENOMEM;
plat_ci = ci13xxx_add_device(&pdev->dev,
pdev->resource, pdev->num_resources,
&ci13xxx_msm_platdata);
if (IS_ERR(plat_ci)) {
dev_err(&pdev->dev, "ci13xxx_add_device failed!\n");
return PTR_ERR(plat_ci);
}

ret = platform_device_add_resources(plat_ci, pdev->resource,
pdev->num_resources);
if (ret) {
dev_err(&pdev->dev, "can't add resources to platform device\n");
goto put_platform;
}

ret = platform_device_add_data(plat_ci, &ci13xxx_msm_platdata,
sizeof(ci13xxx_msm_platdata));
if (ret)
goto put_platform;

ret = platform_device_add(plat_ci);
if (ret)
goto put_platform;

platform_set_drvdata(pdev, plat_ci);

pm_runtime_no_callbacks(&pdev->dev);
pm_runtime_enable(&pdev->dev);

return 0;

put_platform:
platform_device_put(plat_ci);

return ret;
}

static int __devexit ci13xxx_msm_remove(struct platform_device *pdev)
{
struct platform_device *plat_ci = platform_get_drvdata(pdev);

pm_runtime_disable(&pdev->dev);
platform_device_unregister(plat_ci);
ci13xxx_remove_device(plat_ci);

return 0;
}
Expand Down
34 changes: 6 additions & 28 deletions trunk/drivers/usb/chipidea/ci13xxx_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,46 +75,24 @@ static int __devinit ci13xxx_pci_probe(struct pci_dev *pdev,
pci_set_master(pdev);
pci_try_set_mwi(pdev);

plat_ci = platform_device_alloc("ci_hdrc", -1);
if (!plat_ci) {
dev_err(&pdev->dev, "can't allocate ci_hdrc platform device\n");
retval = -ENOMEM;
goto disable_device;
}

memset(res, 0, sizeof(res));
res[0].start = pci_resource_start(pdev, 0);
res[0].end = pci_resource_end(pdev, 0);
res[0].flags = IORESOURCE_MEM;
res[1].start = pdev->irq;
res[1].flags = IORESOURCE_IRQ;

retval = platform_device_add_resources(plat_ci, res, nres);
if (retval) {
dev_err(&pdev->dev, "can't add resources to platform device\n");
goto put_platform;
plat_ci = ci13xxx_add_device(&pdev->dev, res, nres, platdata);
if (IS_ERR(plat_ci)) {
dev_err(&pdev->dev, "ci13xxx_add_device failed!\n");
retval = PTR_ERR(plat_ci);
goto disable_device;
}

retval = platform_device_add_data(plat_ci, platdata, sizeof(*platdata));
if (retval)
goto put_platform;

dma_set_coherent_mask(&plat_ci->dev, pdev->dev.coherent_dma_mask);
plat_ci->dev.dma_mask = pdev->dev.dma_mask;
plat_ci->dev.dma_parms = pdev->dev.dma_parms;
plat_ci->dev.parent = &pdev->dev;

pci_set_drvdata(pdev, plat_ci);

retval = platform_device_add(plat_ci);
if (retval)
goto put_platform;

return 0;

put_platform:
pci_set_drvdata(pdev, NULL);
platform_device_put(plat_ci);
disable_device:
pci_disable_device(pdev);
done:
Expand All @@ -133,7 +111,7 @@ static void __devexit ci13xxx_pci_remove(struct pci_dev *pdev)
{
struct platform_device *plat_ci = pci_get_drvdata(pdev);

platform_device_unregister(plat_ci);
ci13xxx_remove_device(plat_ci);
pci_set_drvdata(pdev, NULL);
pci_disable_device(pdev);
}
Expand Down
43 changes: 43 additions & 0 deletions trunk/drivers/usb/chipidea/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,49 @@ static irqreturn_t ci_irq(int irq, void *data)
return ci->role == CI_ROLE_END ? ret : ci_role(ci)->irq(ci);
}

struct platform_device *ci13xxx_add_device(struct device *dev,
struct resource *res, int nres,
struct ci13xxx_platform_data *platdata)
{
struct platform_device *pdev;
int ret;

/* FIXME: find a way to choose id */
pdev = platform_device_alloc("ci_hdrc", -1);
if (!pdev)
return ERR_PTR(-ENOMEM);

pdev->dev.parent = dev;
pdev->dev.dma_mask = dev->dma_mask;
pdev->dev.dma_parms = dev->dma_parms;
dma_set_coherent_mask(&pdev->dev, dev->coherent_dma_mask);

ret = platform_device_add_resources(pdev, res, nres);
if (ret)
goto err;

ret = platform_device_add_data(pdev, platdata, sizeof(*platdata));
if (ret)
goto err;

ret = platform_device_add(pdev);
if (ret)
goto err;

return pdev;

err:
platform_device_put(pdev);
return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(ci13xxx_add_device);

void ci13xxx_remove_device(struct platform_device *pdev)
{
platform_device_unregister(pdev);
}
EXPORT_SYMBOL_GPL(ci13xxx_remove_device);

static int __devinit ci_hdrc_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
Expand Down
7 changes: 7 additions & 0 deletions trunk/include/linux/usb/chipidea.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,11 @@ struct ci13xxx_platform_data {
/* Default offset of capability registers */
#define DEF_CAPOFFSET 0x100

/* Add ci13xxx device */
struct platform_device *ci13xxx_add_device(struct device *dev,
struct resource *res, int nres,
struct ci13xxx_platform_data *platdata);
/* Remove ci13xxx device */
void ci13xxx_remove_device(struct platform_device *pdev);

#endif

0 comments on commit 6798d77

Please sign in to comment.