diff options
| -rw-r--r-- | arch/arm/boot/dts/qcom/sdm630-cdp.dtsi | 7 | ||||
| -rw-r--r-- | arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi | 13 | ||||
| -rw-r--r-- | arch/arm/boot/dts/qcom/sdm630-mtp.dtsi | 7 | ||||
| -rw-r--r-- | arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts | 23 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_splash.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/msm/adreno.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/msm/kgsl_pwrctrl.c | 3 | ||||
| -rw-r--r-- | drivers/input/sensors/bmi160/bmi160_driver.c | 3 | ||||
| -rw-r--r-- | drivers/input/sensors/bmi160/bmi160_i2c.c | 42 | ||||
| -rw-r--r-- | drivers/media/platform/msm/ais/common/cam_soc_api.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/msm/rndis_ipa.c | 48 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss2/bus.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss2/bus.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss2/qmi.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/ufs/ufs-qcom.c | 10 | ||||
| -rw-r--r-- | drivers/scsi/ufs/ufshcd.c | 10 | ||||
| -rw-r--r-- | drivers/staging/android/ion/ion.c | 8 | ||||
| -rw-r--r-- | drivers/usb/dwc3/gadget.c | 19 | ||||
| -rw-r--r-- | drivers/usb/gadget/composite.c | 11 | ||||
| -rw-r--r-- | include/linux/diagchar.h | 21 |
20 files changed, 189 insertions, 55 deletions
diff --git a/arch/arm/boot/dts/qcom/sdm630-cdp.dtsi b/arch/arm/boot/dts/qcom/sdm630-cdp.dtsi index 6b409c091527..410e3a1da08c 100644 --- a/arch/arm/boot/dts/qcom/sdm630-cdp.dtsi +++ b/arch/arm/boot/dts/qcom/sdm630-cdp.dtsi @@ -226,3 +226,10 @@ &dsi_rm67195_amoled_fhd_cmd { qcom,panel-supply-entries = <&dsi_panel_pwr_supply_labibb_amoled>; }; + +&dsi_hx8399c_truly_vid { + qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled"; + qcom,mdss-dsi-bl-min-level = <1>; + qcom,mdss-dsi-bl-max-level = <4095>; + qcom,panel-supply-entries = <&dsi_panel_pwr_supply>; +}; diff --git a/arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi b/arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi index 16cfbd0e97bc..43375013e7af 100644 --- a/arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi +++ b/arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi @@ -18,6 +18,7 @@ #include "dsi-panel-rm67195-amoled-fhd-cmd.dtsi" #include "dsi-panel-sharp-split-link-wuxga-video.dtsi" #include "dsi-panel-lgd-incell-sw49106-fhd-video.dtsi" +#include "dsi-panel-hx8399c-fhd-plus-video.dtsi" &soc { dsi_panel_pwr_supply: dsi_panel_pwr_supply { @@ -254,3 +255,15 @@ qcom,mdss-dsi-t-clk-post = <0x0d>; qcom,mdss-dsi-t-clk-pre = <0x30>; }; + +&dsi_hx8399c_truly_vid { + qcom,mdss-dsi-panel-timings-phy-v2 = [24 1f 08 09 05 03 04 a0 + 24 1f 08 09 05 03 04 a0 + 24 1f 08 09 05 03 04 a0 + 24 1f 08 09 05 03 04 a0 + 24 1c 08 09 05 03 04 a0]; + qcom,mdss-dsi-min-refresh-rate = <48>; + qcom,mdss-dsi-max-refresh-rate = <60>; + qcom,mdss-dsi-pan-enable-dynamic-fps; + qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp"; +}; diff --git a/arch/arm/boot/dts/qcom/sdm630-mtp.dtsi b/arch/arm/boot/dts/qcom/sdm630-mtp.dtsi index 19d1cb4d2210..c6b0f9be0241 100644 --- a/arch/arm/boot/dts/qcom/sdm630-mtp.dtsi +++ b/arch/arm/boot/dts/qcom/sdm630-mtp.dtsi @@ -223,3 +223,10 @@ qcom,mdss-dsi-bl-max-level = <4095>; qcom,panel-supply-entries = <&dsi_panel_pwr_supply>; }; + +&dsi_hx8399c_truly_vid { + qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled"; + qcom,mdss-dsi-bl-min-level = <1>; + qcom,mdss-dsi-bl-max-level = <4095>; + qcom,panel-supply-entries = <&dsi_panel_pwr_supply>; +}; diff --git a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts index 4d44a2067624..bdf49064c378 100644 --- a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts +++ b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts @@ -16,6 +16,7 @@ #include "vplatform-lfv-msm8996.dtsi" #include <dt-bindings/clock/msm-clocks-8996.h> #include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/gpio/gpio.h> / { model = "Qualcomm Technologies, Inc. MSM 8996"; @@ -452,3 +453,25 @@ &sde_kms_hyp { qcom,client-id = "7815"; }; +&sdhc_2 { + vdd-supply = <&pm8994_l21>; + qcom,vdd-voltage-level = <2950000 2950000>; + qcom,vdd-current-level = <200 800000>; + + vdd-io-supply = <&pm8994_l13>; + qcom,vdd-io-voltage-level = <1800000 2950000>; + qcom,vdd-io-current-level = <200 22000>; + + pinctrl-names = "active", "sleep"; + pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on_sbc>; + pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off + &sdc2_cd_on_sbc>; + + qcom,clk-rates = <400000 20000000 25000000 + 50000000 100000000 200000000>; + qcom,bus-speed-mode = "SDR12", "SDR25", "SDR50", "DDR50", "SDR104"; + + cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; + + status = "okay"; +}; diff --git a/drivers/gpu/drm/msm/sde/sde_splash.c b/drivers/gpu/drm/msm/sde/sde_splash.c index 2ff1483955e2..16f9248b7abe 100644 --- a/drivers/gpu/drm/msm/sde/sde_splash.c +++ b/drivers/gpu/drm/msm/sde/sde_splash.c @@ -354,7 +354,7 @@ static int _sde_splash_free_module_resource(struct msm_mmu *mmu, if (!msm_obj) return -EINVAL; - if (mmu->funcs && mmu->funcs->unmap) + if (mmu->funcs && mmu->funcs->early_splash_unmap) mmu->funcs->early_splash_unmap(mmu, sinfo->splash_mem_paddr[i], msm_obj->sgt); @@ -648,7 +648,7 @@ int sde_splash_smmu_map(struct drm_device *dev, struct msm_mmu *mmu, for (i = 0; i < sinfo->splash_mem_num; i++) { msm_obj = to_msm_bo(sinfo->obj[i]); - if (mmu->funcs && mmu->funcs->map) { + if (mmu->funcs && mmu->funcs->early_splash_map) { ret = mmu->funcs->early_splash_map(mmu, sinfo->splash_mem_paddr[i], msm_obj->sgt, IOMMU_READ | IOMMU_NOEXEC); diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 9cb65033ed13..d2aa0a0f9507 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -2807,7 +2807,8 @@ static void adreno_suspend_device(struct kgsl_device *device, struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); int pm_event = pm_state.event; - adreno_dispatcher_halt(device); + if (device->state == KGSL_STATE_SUSPEND) + adreno_dispatcher_halt(device); if ((pm_event == PM_EVENT_FREEZE) || (pm_event == PM_EVENT_QUIESCE) || diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c index b5476b06176a..b1b0b69d55ba 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.c +++ b/drivers/gpu/msm/kgsl_pwrctrl.c @@ -2785,7 +2785,7 @@ static int _suspend(struct kgsl_device *device) if ((device->state == KGSL_STATE_NONE) || (device->state == KGSL_STATE_INIT) || (device->state == KGSL_STATE_SUSPEND)) - goto done; + return ret; /* drain to prevent from more commands being submitted */ device->ftbl->drain(device); @@ -2802,7 +2802,6 @@ static int _suspend(struct kgsl_device *device) if (ret) goto err; -done: kgsl_pwrctrl_set_state(device, KGSL_STATE_SUSPEND); return ret; diff --git a/drivers/input/sensors/bmi160/bmi160_driver.c b/drivers/input/sensors/bmi160/bmi160_driver.c index 66d224823867..55a30b9af339 100644 --- a/drivers/input/sensors/bmi160/bmi160_driver.c +++ b/drivers/input/sensors/bmi160/bmi160_driver.c @@ -569,7 +569,7 @@ static int bmi_check_chip_id(struct bmi_client_data *client_data) dev_notice(client_data->dev, "Bosch Sensortec Device detected, " "HW IC name: %s\n", sensor_type_map[i].sensor_name); - break; + return 0; } } if (i < bmi_sensor_cnt) @@ -586,6 +586,7 @@ static int bmi_check_chip_id(struct bmi_client_data *client_data) bmi_delay(1); } } + err = -ENODEV; return err; } diff --git a/drivers/input/sensors/bmi160/bmi160_i2c.c b/drivers/input/sensors/bmi160/bmi160_i2c.c index 57d42c6244fc..511f6de9a47e 100644 --- a/drivers/input/sensors/bmi160/bmi160_i2c.c +++ b/drivers/input/sensors/bmi160/bmi160_i2c.c @@ -20,12 +20,19 @@ #include <linux/i2c.h> #include <linux/delay.h> #include "bmi160_driver.h" +#include <linux/regulator/consumer.h> /*! @defgroup bmi160_i2c_src * @brief bmi160 i2c driver module @{*/ static struct i2c_client *bmi_client; + +struct BMI160Supply { + struct regulator *vdd_reg; + struct regulator *vio_reg; +}; + /*! * @brief define i2c wirte function * @@ -256,9 +263,44 @@ static int bmi_i2c_probe(struct i2c_client *client, { int err = 0; struct bmi_client_data *client_data = NULL; + struct BMI160Supply bmi160Supply; dev_info(&client->dev, "BMI160 i2c function probe entrance"); + dev_info(&client->dev, "bmi_i2c_probe regulator ON\n"); + + bmi160Supply.vdd_reg = devm_regulator_get(&client->dev, "vdd"); + if (IS_ERR(bmi160Supply.vdd_reg)) { + if (PTR_ERR(bmi160Supply.vdd_reg) != -EPROBE_DEFER) + dev_err(&client->dev, "bmi160Supply->vdd_reg EPROBE_DEFER Unable to get regulator\n"); + err = PTR_ERR(bmi160Supply.vdd_reg); + goto exit_err_clean; + } + + dev_err(&client->dev, "bmi_i2c_probe before regulator_enable(VDD)\n"); + if (regulator_enable(bmi160Supply.vdd_reg)) { + dev_err(&client->dev, "bmi160Supply->vdd_reg error!regulator cannot enable"); + err = -EIO; + goto exit_err_clean; + } + dev_err(&client->dev, "bmi_i2c_probe after regulator_enable(VDD)\n"); + + bmi160Supply.vio_reg = devm_regulator_get(&client->dev, "vio"); + if (IS_ERR(bmi160Supply.vio_reg)) { + if (PTR_ERR(bmi160Supply.vio_reg) != -EPROBE_DEFER) + dev_err(&client->dev, "bmi160Supply->vio_reg EPROBE_DEFER Unable to get regulator\n"); + err = PTR_ERR(bmi160Supply.vio_reg); + goto exit_err_clean; + } + + dev_err(&client->dev, "bmi_i2c_probe before regulator_enable(VIO)\n"); + if (regulator_enable(bmi160Supply.vio_reg)) { + dev_err(&client->dev, "bmi160Supply->vio_reg error!regulator cannot enable"); + err = -EIO; + goto exit_err_clean; + } + dev_err(&client->dev, "bmi_i2c_probe after regulator_enable(VIO)\n"); + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev, "i2c_check_functionality error!"); err = -EIO; diff --git a/drivers/media/platform/msm/ais/common/cam_soc_api.c b/drivers/media/platform/msm/ais/common/cam_soc_api.c index 46738a1ca381..0ab803da54fc 100644 --- a/drivers/media/platform/msm/ais/common/cam_soc_api.c +++ b/drivers/media/platform/msm/ais/common/cam_soc_api.c @@ -670,9 +670,10 @@ void msm_camera_put_regulators(struct platform_device *pdev, } for (i = cnt - 1; i >= 0; i--) { - if (vdd_info[i] && !IS_ERR_OR_NULL(vdd_info[i]->vdd)) + if (vdd_info[i] && !IS_ERR_OR_NULL(vdd_info[i]->vdd)) { devm_regulator_put(vdd_info[i]->vdd); CDBG("vdd ptr[%d] :%pK\n", i, vdd_info[i]->vdd); + } } devm_kfree(&pdev->dev, *vdd_info); diff --git a/drivers/net/ethernet/msm/rndis_ipa.c b/drivers/net/ethernet/msm/rndis_ipa.c index 683f364ed27b..1e0ca8a31888 100644 --- a/drivers/net/ethernet/msm/rndis_ipa.c +++ b/drivers/net/ethernet/msm/rndis_ipa.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -449,6 +449,11 @@ struct rndis_pkt_hdr rndis_template_hdr = { .zeroes = {0}, }; +static void rndis_ipa_msg_free_cb(void *buff, u32 len, u32 type) +{ + kfree(buff); +} + /** * rndis_ipa_init() - create network device and initialize internal * data structures @@ -648,6 +653,8 @@ int rndis_ipa_pipe_connect_notify(u32 usb_to_ipa_hdl, int next_state; int result; unsigned long flags; + struct ipa_ecm_msg *rndis_msg; + struct ipa_msg_meta msg_meta; RNDIS_IPA_LOG_ENTRY(); @@ -718,6 +725,26 @@ int rndis_ipa_pipe_connect_notify(u32 usb_to_ipa_hdl, } RNDIS_IPA_DEBUG("netif_carrier_on() was called\n"); + rndis_msg = kzalloc(sizeof(*rndis_msg), GFP_KERNEL); + if (!rndis_msg) { + result = -ENOMEM; + goto fail; + } + + memset(&msg_meta, 0, sizeof(struct ipa_msg_meta)); + msg_meta.msg_type = ECM_CONNECT; + msg_meta.msg_len = sizeof(struct ipa_ecm_msg); + strlcpy(rndis_msg->name, rndis_ipa_ctx->net->name, + IPA_RESOURCE_NAME_MAX); + rndis_msg->ifindex = rndis_ipa_ctx->net->ifindex; + + result = ipa_send_msg(&msg_meta, rndis_msg, rndis_ipa_msg_free_cb); + if (result) { + RNDIS_IPA_ERROR("fail to send ECM_CONNECT for rndis\n"); + kfree(rndis_msg); + goto fail; + } + spin_lock_irqsave(&rndis_ipa_ctx->state_lock, flags); next_state = rndis_ipa_next_state(rndis_ipa_ctx->state, RNDIS_IPA_CONNECT); @@ -1165,6 +1192,8 @@ int rndis_ipa_pipe_disconnect_notify(void *private) int outstanding_dropped_pkts; int retval; unsigned long flags; + struct ipa_ecm_msg *rndis_msg; + struct ipa_msg_meta msg_meta; RNDIS_IPA_LOG_ENTRY(); @@ -1192,6 +1221,23 @@ int rndis_ipa_pipe_disconnect_notify(void *private) netif_carrier_off(rndis_ipa_ctx->net); RNDIS_IPA_DEBUG("carrier_off notification was sent\n"); + rndis_msg = kzalloc(sizeof(*rndis_msg), GFP_KERNEL); + if (!rndis_msg) + return -ENOMEM; + + memset(&msg_meta, 0, sizeof(struct ipa_msg_meta)); + msg_meta.msg_type = ECM_DISCONNECT; + msg_meta.msg_len = sizeof(struct ipa_ecm_msg); + strlcpy(rndis_msg->name, rndis_ipa_ctx->net->name, + IPA_RESOURCE_NAME_MAX); + rndis_msg->ifindex = rndis_ipa_ctx->net->ifindex; + + retval = ipa_send_msg(&msg_meta, rndis_msg, rndis_ipa_msg_free_cb); + if (retval) { + RNDIS_IPA_ERROR("fail to send ECM_DISCONNECT for rndis\n"); + kfree(rndis_msg); + return -EPERM; + } netif_stop_queue(rndis_ipa_ctx->net); RNDIS_IPA_DEBUG("queue stopped\n"); diff --git a/drivers/net/wireless/cnss2/bus.c b/drivers/net/wireless/cnss2/bus.c index 17da90259084..4587d4ef162f 100644 --- a/drivers/net/wireless/cnss2/bus.c +++ b/drivers/net/wireless/cnss2/bus.c @@ -162,7 +162,7 @@ int cnss_bus_alloc_fw_mem(struct cnss_plat_data *plat_priv) } } -u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv) +int cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv) { if (!plat_priv) return -ENODEV; diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h index 415f1ae6cfed..ff5f5a85469e 100644 --- a/drivers/net/wireless/cnss2/bus.h +++ b/drivers/net/wireless/cnss2/bus.h @@ -42,7 +42,7 @@ int cnss_bus_init(struct cnss_plat_data *plat_priv); void cnss_bus_deinit(struct cnss_plat_data *plat_priv); int cnss_bus_load_m3(struct cnss_plat_data *plat_priv); int cnss_bus_alloc_fw_mem(struct cnss_plat_data *plat_priv); -u32 cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); +int cnss_bus_get_wake_irq(struct cnss_plat_data *plat_priv); int cnss_bus_force_fw_assert_hdlr(struct cnss_plat_data *plat_priv); void cnss_bus_fw_boot_timeout_hdlr(unsigned long data); void cnss_bus_collect_dump_info(struct cnss_plat_data *plat_priv); diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c index fb2841360265..85701566c58c 100644 --- a/drivers/net/wireless/cnss2/qmi.c +++ b/drivers/net/wireless/cnss2/qmi.c @@ -164,8 +164,9 @@ static int cnss_wlfw_host_cap_send_sync(struct cnss_plat_data *plat_priv) req.num_clients = daemon_support ? 2 : 1; cnss_pr_dbg("Number of clients is %d\n", req.num_clients); - req.wake_msi = cnss_bus_get_wake_irq(plat_priv); - if (req.wake_msi) { + ret = cnss_bus_get_wake_irq(plat_priv); + if (ret > 0) { + req.wake_msi = ret; cnss_pr_dbg("WAKE MSI base data is %d\n", req.wake_msi); req.wake_msi_valid = 1; } diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c index 6e307b5dce81..e1509b2bad19 100644 --- a/drivers/scsi/ufs/ufs-qcom.c +++ b/drivers/scsi/ufs/ufs-qcom.c @@ -728,6 +728,11 @@ static int ufs_qcom_config_vreg(struct device *dev, reg = vreg->reg; if (regulator_count_voltages(reg) > 0) { + uA_load = on ? vreg->max_uA : 0; + ret = regulator_set_load(vreg->reg, uA_load); + if (ret) + goto out; + min_uV = on ? vreg->min_uV : 0; ret = regulator_set_voltage(reg, min_uV, vreg->max_uV); if (ret) { @@ -735,11 +740,6 @@ static int ufs_qcom_config_vreg(struct device *dev, __func__, vreg->name, ret); goto out; } - - uA_load = on ? vreg->max_uA : 0; - ret = regulator_set_load(vreg->reg, uA_load); - if (ret) - goto out; } out: return ret; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 6af0ca6eb7e2..707da4ae8185 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7997,6 +7997,11 @@ static int ufshcd_config_vreg(struct device *dev, name = vreg->name; if (regulator_count_voltages(reg) > 0) { + uA_load = on ? vreg->max_uA : 0; + ret = ufshcd_config_vreg_load(dev, vreg, uA_load); + if (ret) + goto out; + min_uV = on ? vreg->min_uV : 0; ret = regulator_set_voltage(reg, min_uV, vreg->max_uV); if (ret) { @@ -8004,11 +8009,6 @@ static int ufshcd_config_vreg(struct device *dev, __func__, name, ret); goto out; } - - uA_load = on ? vreg->max_uA : 0; - ret = ufshcd_config_vreg_load(dev, vreg, uA_load); - if (ret) - goto out; } out: return ret; diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index 05fc6a7af8c2..9a0b73bc1379 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -453,16 +453,14 @@ static struct ion_handle *user_ion_handle_get_check_overflow( /* passes a kref to the user ref count. * We know we're holding a kref to the object before and * after this call, so no need to reverify handle. + * Caller must hold the client lock, except for ION_IOC_ALLOC. */ static struct ion_handle *pass_to_user(struct ion_handle *handle) { - struct ion_client *client = handle->client; struct ion_handle *ret; - mutex_lock(&client->lock); ret = user_ion_handle_get_check_overflow(handle); ion_handle_put_nolock(handle); - mutex_unlock(&client->lock); return ret; } @@ -1700,7 +1698,8 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct ion_handle *handle; - handle = ion_import_dma_buf(client, data.fd.fd); + mutex_lock(&client->lock); + handle = ion_import_dma_buf_nolock(client, data.fd.fd); if (IS_ERR(handle)) { ret = PTR_ERR(handle); } else { @@ -1710,6 +1709,7 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) else data.handle.handle = handle->id; } + mutex_unlock(&client->lock); break; } case ION_IOC_SYNC: diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 48bfe2aaef1a..a6e13948041e 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1818,7 +1818,6 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) { u32 reg; u32 timeout = 500; - ktime_t start, diff; reg = dwc3_readl(dwc->regs, DWC3_DCTL); if (is_on) { @@ -1831,24 +1830,6 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) if (dwc->revision >= DWC3_REVISION_194A) reg &= ~DWC3_DCTL_KEEP_CONNECT; - start = ktime_get(); - /* issue device SoftReset */ - dwc3_writel(dwc->regs, DWC3_DCTL, reg | DWC3_DCTL_CSFTRST); - do { - reg = dwc3_readl(dwc->regs, DWC3_DCTL); - if (!(reg & DWC3_DCTL_CSFTRST)) - break; - - diff = ktime_sub(ktime_get(), start); - /* poll for max. 10ms */ - if (ktime_to_ms(diff) > DWC3_SOFT_RESET_TIMEOUT) { - printk_ratelimited(KERN_ERR - "%s:core Reset Timed Out\n", __func__); - break; - } - cpu_relax(); - } while (true); - dwc3_event_buffers_setup(dwc); dwc3_gadget_restart(dwc); diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index bf9730884235..c2dac015c501 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -486,14 +486,19 @@ done: static u8 encode_bMaxPower(enum usb_device_speed speed, struct usb_configuration *c) { - unsigned val = CONFIG_USB_GADGET_VBUS_DRAW; + unsigned val = c->MaxPower; switch (speed) { case USB_SPEED_SUPER: - /* with super-speed report 900mA */ - val = SSUSB_GADGET_VBUS_DRAW; + /* with super-speed report 900mA if user hasn't specified */ + if (!val) + val = SSUSB_GADGET_VBUS_DRAW; + return (u8)(val / SSUSB_GADGET_VBUS_DRAW_UNITS); default: + if (!val) + val = CONFIG_USB_GADGET_VBUS_DRAW; + return DIV_ROUND_UP(val, HSUSB_GADGET_VBUS_DRAW_UNITS); } } diff --git a/include/linux/diagchar.h b/include/linux/diagchar.h index e724a4195170..ec9e2edda345 100644 --- a/include/linux/diagchar.h +++ b/include/linux/diagchar.h @@ -145,7 +145,7 @@ the appropriate macros. */ /* This needs to be modified manually now, when we add a new RANGE of SSIDs to the msg_mask_tbl */ #define MSG_MASK_TBL_CNT 26 -#define APPS_EVENT_LAST_ID 0xC85 +#define APPS_EVENT_LAST_ID 0xC92 #define MSG_SSID_0 0 #define MSG_SSID_0_LAST 129 @@ -180,7 +180,7 @@ the appropriate macros. */ #define MSG_SSID_15 8000 #define MSG_SSID_15_LAST 8000 #define MSG_SSID_16 8500 -#define MSG_SSID_16_LAST 8529 +#define MSG_SSID_16_LAST 8531 #define MSG_SSID_17 9000 #define MSG_SSID_17_LAST 9008 #define MSG_SSID_18 9500 @@ -757,11 +757,18 @@ static const uint32_t msg_bld_masks_16[] = { MSG_LVL_LOW, MSG_LVL_LOW, MSG_LVL_LOW, - MSG_LVL_LOW|MSG_LVL_MED|MSG_LVL_HIGH|MSG_LVL_ERROR|MSG_LVL_FATAL, - MSG_LVL_LOW|MSG_LVL_MED|MSG_LVL_HIGH|MSG_LVL_ERROR|MSG_LVL_FATAL, - MSG_LVL_LOW|MSG_LVL_MED|MSG_LVL_HIGH|MSG_LVL_ERROR|MSG_LVL_FATAL, - MSG_LVL_LOW|MSG_LVL_MED|MSG_LVL_HIGH|MSG_LVL_ERROR|MSG_LVL_FATAL, - MSG_LVL_LOW|MSG_LVL_MED|MSG_LVL_HIGH|MSG_LVL_ERROR|MSG_LVL_FATAL + MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR | + MSG_LVL_FATAL, + MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR | + MSG_LVL_FATAL, + MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR | + MSG_LVL_FATAL, + MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR | + MSG_LVL_FATAL, + MSG_LVL_LOW | MSG_LVL_MED | MSG_LVL_HIGH | MSG_LVL_ERROR | + MSG_LVL_FATAL, + MSG_LVL_MED, + MSG_LVL_MED }; static const uint32_t msg_bld_masks_17[] = { |
