summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/boot/dts/qcom/sdm630-cdp.dtsi7
-rw-r--r--arch/arm/boot/dts/qcom/sdm630-mdss-panels.dtsi13
-rw-r--r--arch/arm/boot/dts/qcom/sdm630-mtp.dtsi7
-rw-r--r--arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts23
-rw-r--r--drivers/gpu/drm/msm/sde/sde_splash.c4
-rw-r--r--drivers/gpu/msm/adreno.c3
-rw-r--r--drivers/gpu/msm/kgsl_pwrctrl.c3
-rw-r--r--drivers/input/sensors/bmi160/bmi160_driver.c3
-rw-r--r--drivers/input/sensors/bmi160/bmi160_i2c.c42
-rw-r--r--drivers/media/platform/msm/ais/common/cam_soc_api.c3
-rw-r--r--drivers/net/ethernet/msm/rndis_ipa.c48
-rw-r--r--drivers/net/wireless/cnss2/bus.c2
-rw-r--r--drivers/net/wireless/cnss2/bus.h2
-rw-r--r--drivers/net/wireless/cnss2/qmi.c5
-rw-r--r--drivers/scsi/ufs/ufs-qcom.c10
-rw-r--r--drivers/scsi/ufs/ufshcd.c10
-rw-r--r--drivers/staging/android/ion/ion.c8
-rw-r--r--drivers/usb/dwc3/gadget.c19
-rw-r--r--drivers/usb/gadget/composite.c11
-rw-r--r--include/linux/diagchar.h21
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[] = {