Loading drivers/usb/gadget/ci13xxx_msm_hsic.c +33 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <linux/usb/gadget.h> #include <linux/usb/msm_hsusb_hw.h> #include <linux/usb/msm_hsusb.h> #include <linux/msm-bus.h> #include <mach/msm_iomap.h> #include <mach/rpm-regulator.h> Loading Loading @@ -64,6 +65,8 @@ struct msm_hsic_per { struct workqueue_struct *wq; struct work_struct suspend_w; struct msm_hsic_peripheral_platform_data *pdata; u32 bus_perf_client; struct msm_bus_scale_pdata *bus_scale_table; enum usb_vdd_type vdd_type; bool connected; }; Loading Loading @@ -444,6 +447,12 @@ static int msm_hsic_suspend(struct msm_hsic_per *mhsic) mhsic->vdd_val[MAX]); if (ret < 0) dev_err(mhsic->dev, "unable to set vdd voltage for VDD MIN\n"); if (mhsic->bus_perf_client) { ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 0); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } if (device_may_wakeup(mhsic->dev)) enable_irq_wake(mhsic->irq); Loading @@ -469,6 +478,13 @@ static int msm_hsic_resume(struct msm_hsic_per *mhsic) wake_lock(&mhsic->wlock); if (mhsic->bus_perf_client) { ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 1); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } ret = regulator_set_voltage(mhsic->hsic_vdd, mhsic->vdd_val[MIN], mhsic->vdd_val[MAX]); if (ret < 0) Loading Loading @@ -804,6 +820,19 @@ static int msm_hsic_probe(struct platform_device *pdev) goto deinit_vddcx; } mhsic->bus_scale_table = msm_bus_cl_get_pdata(pdev); if (!mhsic->bus_scale_table) { dev_err(&pdev->dev, "bus scaling is disabled\n"); } else { mhsic->bus_perf_client = msm_bus_scale_register_client(mhsic->bus_scale_table); ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 1); dev_debug(&pdev->dev, "bus scaling is enabled\n"); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } ret = udc_probe(&ci13xxx_msm_udc_hsic_driver, &pdev->dev, mhsic->regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); Loading Loading @@ -832,6 +861,8 @@ static int msm_hsic_probe(struct platform_device *pdev) return 0; udc_remove: udc_remove(); if (mhsic->bus_perf_client) msm_bus_scale_unregister_client(mhsic->bus_perf_client); deinit_vddcx: msm_hsic_init_vdd(mhsic, 0); deinit_clocks: Loading @@ -858,6 +889,8 @@ static int hsic_msm_remove(struct platform_device *pdev) msm_hsic_enable_clocks(pdev, mhsic, 0); wake_lock_destroy(&mhsic->wlock); destroy_workqueue(mhsic->wq); if (mhsic->bus_perf_client) msm_bus_scale_unregister_client(mhsic->bus_perf_client); udc_remove(); iounmap(mhsic->regs); kfree(mhsic); Loading Loading
drivers/usb/gadget/ci13xxx_msm_hsic.c +33 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <linux/usb/gadget.h> #include <linux/usb/msm_hsusb_hw.h> #include <linux/usb/msm_hsusb.h> #include <linux/msm-bus.h> #include <mach/msm_iomap.h> #include <mach/rpm-regulator.h> Loading Loading @@ -64,6 +65,8 @@ struct msm_hsic_per { struct workqueue_struct *wq; struct work_struct suspend_w; struct msm_hsic_peripheral_platform_data *pdata; u32 bus_perf_client; struct msm_bus_scale_pdata *bus_scale_table; enum usb_vdd_type vdd_type; bool connected; }; Loading Loading @@ -444,6 +447,12 @@ static int msm_hsic_suspend(struct msm_hsic_per *mhsic) mhsic->vdd_val[MAX]); if (ret < 0) dev_err(mhsic->dev, "unable to set vdd voltage for VDD MIN\n"); if (mhsic->bus_perf_client) { ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 0); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } if (device_may_wakeup(mhsic->dev)) enable_irq_wake(mhsic->irq); Loading @@ -469,6 +478,13 @@ static int msm_hsic_resume(struct msm_hsic_per *mhsic) wake_lock(&mhsic->wlock); if (mhsic->bus_perf_client) { ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 1); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } ret = regulator_set_voltage(mhsic->hsic_vdd, mhsic->vdd_val[MIN], mhsic->vdd_val[MAX]); if (ret < 0) Loading Loading @@ -804,6 +820,19 @@ static int msm_hsic_probe(struct platform_device *pdev) goto deinit_vddcx; } mhsic->bus_scale_table = msm_bus_cl_get_pdata(pdev); if (!mhsic->bus_scale_table) { dev_err(&pdev->dev, "bus scaling is disabled\n"); } else { mhsic->bus_perf_client = msm_bus_scale_register_client(mhsic->bus_scale_table); ret = msm_bus_scale_client_update_request( mhsic->bus_perf_client, 1); dev_debug(&pdev->dev, "bus scaling is enabled\n"); if (ret) dev_err(mhsic->dev, "Failed to vote for bus scaling\n"); } ret = udc_probe(&ci13xxx_msm_udc_hsic_driver, &pdev->dev, mhsic->regs); if (ret < 0) { dev_err(&pdev->dev, "udc_probe failed\n"); Loading Loading @@ -832,6 +861,8 @@ static int msm_hsic_probe(struct platform_device *pdev) return 0; udc_remove: udc_remove(); if (mhsic->bus_perf_client) msm_bus_scale_unregister_client(mhsic->bus_perf_client); deinit_vddcx: msm_hsic_init_vdd(mhsic, 0); deinit_clocks: Loading @@ -858,6 +889,8 @@ static int hsic_msm_remove(struct platform_device *pdev) msm_hsic_enable_clocks(pdev, mhsic, 0); wake_lock_destroy(&mhsic->wlock); destroy_workqueue(mhsic->wq); if (mhsic->bus_perf_client) msm_bus_scale_unregister_client(mhsic->bus_perf_client); udc_remove(); iounmap(mhsic->regs); kfree(mhsic); Loading