diff --git a/drivers/i2c/busses/i2c-msm-geni.c b/drivers/i2c/busses/i2c-msm-geni.c index 33fdc8a4f3f7..c850bdce9f70 100644 --- a/drivers/i2c/busses/i2c-msm-geni.c +++ b/drivers/i2c/busses/i2c-msm-geni.c @@ -1237,6 +1237,9 @@ static int geni_i2c_probe(struct platform_device *pdev) dev_info(&pdev->dev, "LE-VM usecase\n"); } + if (of_property_read_bool(pdev->dev.of_node, "qcom,leica-used-i2c")) + gi2c->i2c_rsc.skip_bw_vote = true; + gi2c->i2c_rsc.wrapper_dev = &wrapper_pdev->dev; gi2c->i2c_rsc.ctrl_dev = gi2c->dev; diff --git a/drivers/platform/msm/msm-geni-se.c b/drivers/platform/msm/msm-geni-se.c index 66a34dd7816d..80e5a719c97d 100644 --- a/drivers/platform/msm/msm-geni-se.c +++ b/drivers/platform/msm/msm-geni-se.c @@ -715,6 +715,9 @@ static int geni_se_rmv_ab_ib(struct geni_se_device *geni_se_dev, if (geni_se_dev->vectors == NULL) return 0; + if (rsc->skip_bw_vote) + return 0; + if (unlikely(list_empty(&rsc->ab_list) || list_empty(&rsc->ib_list))) return -EINVAL; @@ -862,6 +865,9 @@ static int geni_se_add_ab_ib(struct geni_se_device *geni_se_dev, if (geni_se_dev->vectors == NULL) return 0; + if (rsc->skip_bw_vote) + return 0; + mutex_lock(&geni_se_dev->geni_dev_lock); list_add(&rsc->ab_list, &geni_se_dev->ab_list_head); diff --git a/include/linux/msm-geni-se.h b/include/linux/msm-geni-se.h index 92f587b7deaa..47872cda8a90 100644 --- a/include/linux/msm-geni-se.h +++ b/include/linux/msm-geni-se.h @@ -51,6 +51,7 @@ enum se_protocol_types { * @geni_gpi_sleep: Handle to the sleep pinctrl state. * @num_clk_levels: Number of valid clock levels in clk_perf_tbl. * @clk_perf_tbl: Table of clock frequency input to Serial Engine clock. + * @skip_bw_vote: Used for PMIC over i2c use case to skip the BW vote. */ struct se_geni_rsc { struct device *ctrl_dev; @@ -73,6 +74,7 @@ struct se_geni_rsc { int clk_freq_out; unsigned int num_clk_levels; unsigned long *clk_perf_tbl; + bool skip_bw_vote; }; #define PINCTRL_DEFAULT "default"