diff options
| -rw-r--r-- | Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt | 6 | ||||
| -rw-r--r-- | arch/arm/boot/dts/qcom/sdm630.dtsi | 2 | ||||
| -rw-r--r-- | arch/arm/configs/msmcortex_defconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mm/dma-mapping.c | 2 | ||||
| -rw-r--r-- | drivers/clk/clk.c | 18 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dmxdev.c | 8 | ||||
| -rw-r--r-- | drivers/media/platform/msm/broadcast/tspp.c | 8 | ||||
| -rw-r--r-- | drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c | 3 | ||||
| -rw-r--r-- | drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c | 11 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/qpnp-smb2.c | 11 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.c | 52 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.h | 3 | ||||
| -rw-r--r-- | drivers/usb/gadget/function/f_cdev.c | 2 | ||||
| -rw-r--r-- | include/uapi/drm/msm_drm.h | 6 |
14 files changed, 85 insertions, 49 deletions
diff --git a/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt b/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt index 894c34553a22..b41219d51973 100644 --- a/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt +++ b/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt @@ -181,6 +181,12 @@ Charger specific properties: Definition: Specifies the maximum charger buck/boost switching frequency in KHz. It overrides the max frequency defined for the charger. +- qcom,otg-deglitch-time-ms + Usage: optional + Value type: <u32> + Definition: Specifies the deglitch interval for OTG detection. + If the value is not present, 50 msec is used as default. + ============================================= Second Level Nodes - SMB2 Charger Peripherals ============================================= diff --git a/arch/arm/boot/dts/qcom/sdm630.dtsi b/arch/arm/boot/dts/qcom/sdm630.dtsi index 24a935ffebec..9897900d3fd5 100644 --- a/arch/arm/boot/dts/qcom/sdm630.dtsi +++ b/arch/arm/boot/dts/qcom/sdm630.dtsi @@ -1323,7 +1323,7 @@ < 1670400000 0x04040057 0x08450045 0x2 6 >, < 1881600000 0x04040062 0x094e004e 0x2 7 >, < 2016000000 0x04040069 0x0a540054 0x2 8 >, - < 2150400000 0x04040070 0x0b590059 0x2 8 >, + < 2150400000 0x04040070 0x0b590059 0x2 9 >, < 2208000000 0x04040073 0x0b5c005c 0x3 10 >; qcom,perfcl-speedbin2-v0 = diff --git a/arch/arm/configs/msmcortex_defconfig b/arch/arm/configs/msmcortex_defconfig index 1658cc992ee6..45aa719252d4 100644 --- a/arch/arm/configs/msmcortex_defconfig +++ b/arch/arm/configs/msmcortex_defconfig @@ -224,7 +224,6 @@ CONFIG_ZRAM=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_UID_CPUTIME=y CONFIG_MSM_ULTRASOUND=y CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y @@ -294,7 +293,6 @@ CONFIG_PINCTRL_SDM660=y CONFIG_GPIO_SYSFS=y CONFIG_GPIO_QPNP_PIN=y CONFIG_POWER_SUPPLY=y -CONFIG_QPNP_SMBCHARGER=y CONFIG_SMB135X_CHARGER=y CONFIG_SMB1351_USB_CHARGER=y CONFIG_MSM_BCL_CTL=y diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index a25d6b0e22a4..7708d83f16ac 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -672,7 +672,7 @@ static void __free_from_contiguous(struct device *dev, struct page *page, if (PageHighMem(page)) __dma_free_remap(cpu_addr, size, true); else - __dma_remap(page, size, PAGE_KERNEL, false); + __dma_remap(page, size, PAGE_KERNEL, true); dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT); } diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 4996f4f312f4..73d65813de8b 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1751,6 +1751,15 @@ static int clk_change_rate(struct clk_core *core) else if (core->parent) best_parent_rate = core->parent->rate; + trace_clk_set_rate(core, core->new_rate); + + /* Enforce vdd requirements for new frequency. */ + if (core->prepare_count) { + rc = clk_vote_rate_vdd(core, core->new_rate); + if (rc) + goto out; + } + if (core->new_parent && core->new_parent != core->parent) { old_parent = __clk_set_parent_before(core, core->new_parent); trace_clk_set_parent(core, core->new_parent); @@ -1768,15 +1777,6 @@ static int clk_change_rate(struct clk_core *core) __clk_set_parent_after(core, core->new_parent, old_parent); } - trace_clk_set_rate(core, core->new_rate); - - /* Enforce vdd requirements for new frequency. */ - if (core->prepare_count) { - rc = clk_vote_rate_vdd(core, core->new_rate); - if (rc) - goto out; - } - if (!skip_set_rate && core->ops->set_rate) { rc = core->ops->set_rate(core->hw, core->new_rate, best_parent_rate); diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c index a9c4237d631a..9b743f5fdcf8 100644 --- a/drivers/media/dvb-core/dmxdev.c +++ b/drivers/media/dvb-core/dmxdev.c @@ -1615,7 +1615,7 @@ static int dvb_dvr_get_event(struct dmxdev *dmxdev, unsigned int f_flags, struct dmx_filter_event *event) { - int res; + int res = 0; if (!((f_flags & O_ACCMODE) == O_RDONLY)) return -EINVAL; @@ -2402,8 +2402,10 @@ static int dvb_dmxdev_set_playback_mode(struct dmxdev_filter *dmxdevfilter, (playback_mode != DMX_PB_MODE_PULL)) return -EINVAL; + if (dmxdev->demux->set_playback_mode == NULL) + return -EINVAL; + if (((dmxdev->source < DMX_SOURCE_DVR0) || - !dmxdev->demux->set_playback_mode || !(caps.caps & DMX_CAP_PULL_MODE)) && (playback_mode == DMX_PB_MODE_PULL)) return -EPERM; @@ -2520,7 +2522,7 @@ static int dvb_dmxdev_release_data(struct dmxdev_filter *dmxdevfilter, static int dvb_dmxdev_get_event(struct dmxdev_filter *dmxdevfilter, struct dmx_filter_event *event) { - int res; + int res = 0; spin_lock_irq(&dmxdevfilter->dev->lock); diff --git a/drivers/media/platform/msm/broadcast/tspp.c b/drivers/media/platform/msm/broadcast/tspp.c index b706d598e6b8..fa566ad01d99 100644 --- a/drivers/media/platform/msm/broadcast/tspp.c +++ b/drivers/media/platform/msm/broadcast/tspp.c @@ -2210,7 +2210,13 @@ int tspp_remove_filter(u32 dev, u32 channel_id, channel = &pdev->channels[channel_id]; src = channel->src; - tspp_filter = &(pdev->filters[src]->filter[filter->priority]); + if ((src == TSPP_SOURCE_TSIF0) || (src == TSPP_SOURCE_TSIF1)) + tspp_filter = &(pdev->filters[src]->filter[filter->priority]); + else { + pr_err("tspp_remove: wrong source type %d", src); + return -EINVAL; + } + /* disable pipe (channel) */ val = readl_relaxed(pdev->base + TSPP_PS_DISABLE); diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c index 0c0a9f997fa0..f9809615b407 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c @@ -844,7 +844,6 @@ static void msm_isp_sync_dual_cam_frame_id( } } - WARN_ON(ms_res->dual_sync_mode == MSM_ISP_DUAL_CAM_ASYNC); /* find highest frame id */ for (i = 0; i < MAX_VFE * VFE_SRC_MAX; i++) { if (ms_res->src_info[i] == NULL) @@ -918,7 +917,7 @@ void msm_isp_increment_frame_id(struct vfe_device *vfe_dev, */ if (ms_res->src_sof_mask & (1 << src_info->dual_hw_ms_info.index)) { - pr_err("Frame out of sync on vfe %d\n", + pr_err_ratelimited("Frame out of sync on vfe %d\n", vfe_dev->pdev->id); /* * set this isp as async mode to force diff --git a/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c b/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c index 2fc3ce406c27..2d2296893140 100644 --- a/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c +++ b/drivers/media/platform/msm/dvb/demux/mpq_dmx_plugin_common.c @@ -6536,10 +6536,8 @@ static int mpq_sdmx_write(struct mpq_demux *mpq_demux, const char *buf, size_t count) { - struct ion_handle *ion_handle = - mpq_demux->demux.dmx.dvr_input.priv_handle; - struct dvb_ringbuffer *rbuf = (struct dvb_ringbuffer *) - mpq_demux->demux.dmx.dvr_input.ringbuff; + struct ion_handle *ion_handle; + struct dvb_ringbuffer *rbuf; struct sdmx_buff_descr buf_desc; u32 read_offset; int ret; @@ -6549,10 +6547,13 @@ static int mpq_sdmx_write(struct mpq_demux *mpq_demux, return -EINVAL; } + ion_handle = mpq_demux->demux.dmx.dvr_input.priv_handle; + rbuf = (struct dvb_ringbuffer *)mpq_demux->demux.dmx.dvr_input.ringbuff; + ret = mpq_sdmx_dvr_buffer_desc(mpq_demux, &buf_desc); if (ret) { MPQ_DVB_ERR_PRINT( - "%s: Failed to init input buffer descriptor. ret = %d\n", + "%s: Failed to init input buffer descriptor. ret = %d\n", __func__, ret); return ret; } diff --git a/drivers/power/supply/qcom/qpnp-smb2.c b/drivers/power/supply/qcom/qpnp-smb2.c index 94b9e9c4d912..b2597987292b 100644 --- a/drivers/power/supply/qcom/qpnp-smb2.c +++ b/drivers/power/supply/qcom/qpnp-smb2.c @@ -266,8 +266,9 @@ module_param_named( debug_mask, __debug_mask, int, S_IRUSR | S_IWUSR ); -#define MICRO_1P5A 1500000 -#define MICRO_P1A 100000 +#define MICRO_1P5A 1500000 +#define MICRO_P1A 100000 +#define OTG_DEFAULT_DEGLITCH_TIME_MS 50 static int smb2_parse_dt(struct smb2 *chip) { struct smb_charger *chg = &chip->chg; @@ -400,6 +401,12 @@ static int smb2_parse_dt(struct smb2 *chip) chg->suspend_input_on_debug_batt = of_property_read_bool(node, "qcom,suspend-input-on-debug-batt"); + + rc = of_property_read_u32(node, "qcom,otg-deglitch-time-ms", + &chg->otg_delay_ms); + if (rc < 0) + chg->otg_delay_ms = OTG_DEFAULT_DEGLITCH_TIME_MS; + return 0; } diff --git a/drivers/power/supply/qcom/smb-lib.c b/drivers/power/supply/qcom/smb-lib.c index a191391a3904..cc50e0f478d1 100644 --- a/drivers/power/supply/qcom/smb-lib.c +++ b/drivers/power/supply/qcom/smb-lib.c @@ -3750,26 +3750,6 @@ static void smblib_handle_typec_debounce_done(struct smb_charger *chg, smblib_typec_mode_name[pval.intval]); } -irqreturn_t smblib_handle_usb_typec_change_for_uusb(struct smb_charger *chg) -{ - int rc; - u8 stat; - - rc = smblib_read(chg, TYPE_C_STATUS_3_REG, &stat); - if (rc < 0) { - smblib_err(chg, "Couldn't read TYPE_C_STATUS_3 rc=%d\n", rc); - return IRQ_HANDLED; - } - smblib_dbg(chg, PR_REGISTER, "TYPE_C_STATUS_3 = 0x%02x OTG=%d\n", - stat, !!(stat & (U_USB_GND_NOVBUS_BIT | U_USB_GND_BIT))); - - extcon_set_cable_state_(chg->extcon, EXTCON_USB_HOST, - !!(stat & (U_USB_GND_NOVBUS_BIT | U_USB_GND_BIT))); - power_supply_changed(chg->usb_psy); - - return IRQ_HANDLED; -} - static void smblib_usb_typec_change(struct smb_charger *chg) { int rc; @@ -3804,7 +3784,11 @@ irqreturn_t smblib_handle_usb_typec_change(int irq, void *data) struct smb_charger *chg = irq_data->parent_data; if (chg->micro_usb_mode) { - smblib_handle_usb_typec_change_for_uusb(chg); + cancel_delayed_work_sync(&chg->uusb_otg_work); + vote(chg->awake_votable, OTG_DELAY_VOTER, true, 0); + smblib_dbg(chg, PR_INTERRUPT, "Scheduling OTG work\n"); + schedule_delayed_work(&chg->uusb_otg_work, + msecs_to_jiffies(chg->otg_delay_ms)); return IRQ_HANDLED; } @@ -3889,6 +3873,30 @@ irqreturn_t smblib_handle_wdog_bark(int irq, void *data) /*************** * Work Queues * ***************/ +static void smblib_uusb_otg_work(struct work_struct *work) +{ + struct smb_charger *chg = container_of(work, struct smb_charger, + uusb_otg_work.work); + int rc; + u8 stat; + bool otg; + + rc = smblib_read(chg, TYPE_C_STATUS_3_REG, &stat); + if (rc < 0) { + smblib_err(chg, "Couldn't read TYPE_C_STATUS_3 rc=%d\n", rc); + goto out; + } + + otg = !!(stat & (U_USB_GND_NOVBUS_BIT | U_USB_GND_BIT)); + extcon_set_cable_state_(chg->extcon, EXTCON_USB_HOST, otg); + smblib_dbg(chg, PR_REGISTER, "TYPE_C_STATUS_3 = 0x%02x OTG=%d\n", + stat, otg); + power_supply_changed(chg->usb_psy); + +out: + vote(chg->awake_votable, OTG_DELAY_VOTER, false, 0); +} + static void smblib_hvdcp_detect_work(struct work_struct *work) { @@ -4482,6 +4490,7 @@ int smblib_init(struct smb_charger *chg) INIT_DELAYED_WORK(&chg->icl_change_work, smblib_icl_change_work); INIT_DELAYED_WORK(&chg->pl_enable_work, smblib_pl_enable_work); INIT_WORK(&chg->legacy_detection_work, smblib_legacy_detection_work); + INIT_DELAYED_WORK(&chg->uusb_otg_work, smblib_uusb_otg_work); chg->fake_capacity = -EINVAL; chg->fake_input_current_limited = -EINVAL; @@ -4536,6 +4545,7 @@ int smblib_deinit(struct smb_charger *chg) cancel_delayed_work_sync(&chg->icl_change_work); cancel_delayed_work_sync(&chg->pl_enable_work); cancel_work_sync(&chg->legacy_detection_work); + cancel_delayed_work_sync(&chg->uusb_otg_work); power_supply_unreg_notifier(&chg->nb); smblib_destroy_votables(chg); qcom_batt_deinit(); diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h index 5dc60ecb9436..3fedff8897ee 100644 --- a/drivers/power/supply/qcom/smb-lib.h +++ b/drivers/power/supply/qcom/smb-lib.h @@ -64,6 +64,7 @@ enum print_reason { #define CC2_WA_VOTER "CC2_WA_VOTER" #define QNOVO_VOTER "QNOVO_VOTER" #define BATT_PROFILE_VOTER "BATT_PROFILE_VOTER" +#define OTG_DELAY_VOTER "OTG_DELAY_VOTER" #define VCONN_MAX_ATTEMPTS 3 #define OTG_MAX_ATTEMPTS 3 @@ -230,6 +231,7 @@ struct smb_charger { bool external_vconn; struct smb_chg_freq chg_freq; int smb_version; + int otg_delay_ms; /* locks */ struct mutex lock; @@ -290,6 +292,7 @@ struct smb_charger { struct delayed_work icl_change_work; struct delayed_work pl_enable_work; struct work_struct legacy_detection_work; + struct delayed_work uusb_otg_work; /* cached status */ int voltage_min_uv; diff --git a/drivers/usb/gadget/function/f_cdev.c b/drivers/usb/gadget/function/f_cdev.c index d45f4be4a075..3d466bfa098d 100644 --- a/drivers/usb/gadget/function/f_cdev.c +++ b/drivers/usb/gadget/function/f_cdev.c @@ -48,7 +48,7 @@ #define DEVICE_NAME "at_usb" #define MODULE_NAME "msm_usb_bridge" -#define NUM_INSTANCE 2 +#define NUM_INSTANCE 3 #define MAX_CDEV_INST_NAME 15 #define MAX_CDEV_FUNC_NAME 5 diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index 5bd9321c717a..48c49741d77f 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -145,7 +145,11 @@ struct drm_msm_gem_cpu_fini { */ struct drm_msm_gem_submit_reloc { __u32 submit_offset; /* in, offset from submit_bo */ - __u32 or; /* in, value OR'd with result */ +#ifdef __cplusplus + __u32 or_val; +#else + __u32 or; /* in, value OR'd with result */ +#endif __s32 shift; /* in, amount of left shift (can be negative) */ __u32 reloc_idx; /* in, index of reloc_bo buffer */ __u64 reloc_offset; /* in, offset from start of reloc_bo */ |
