Merge tag 'qcom-drivers-for-6.15-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into soc/drivers
More Qualcomm driver updates for v6.15 Introduce Devicetree binding for providing board-specific firmware-name for the GENI serial engine block. Add SDM630/636 support in pd-mapper. Clean up and fix error handling in the SSC block bus driver. Add missing msm8916-acc compatible to resolve a number of Devicetree validation errors. * tag 'qcom-drivers-for-6.15-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux: dt-bindings: power: qcom,kpss-acc-v2: add qcom,msm8916-acc compatible bus: qcom-ssc-block-bus: Fix the error handling path of qcom_ssc_block_bus_probe() bus: qcom-ssc-block-bus: Remove some duplicated iounmap() calls soc: qcom: pd-mapper: Add support for SDM630/636 dt-bindings: qcom: geni-se: Add 'firmware-name' property for firmware loading Link: https://lore.kernel.org/r/20250319142448.2279164-1-andersson@kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -18,7 +18,9 @@ description:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,kpss-acc-v2
|
||||
enum:
|
||||
- qcom,kpss-acc-v2
|
||||
- qcom,msm8916-acc
|
||||
|
||||
reg:
|
||||
items:
|
||||
|
||||
@@ -54,6 +54,10 @@ properties:
|
||||
|
||||
dma-coherent: true
|
||||
|
||||
firmware-name:
|
||||
maxItems: 1
|
||||
description: Specify the name of the QUP firmware to load.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
@@ -135,6 +139,7 @@ examples:
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
firmware-name = "qcom/sa8775p/qupv3fw.elf";
|
||||
|
||||
i2c0: i2c@a94000 {
|
||||
compatible = "qcom,geni-i2c";
|
||||
|
||||
@@ -264,18 +264,6 @@ static int qcom_ssc_block_bus_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
data->pd_names = qcom_ssc_block_pd_names;
|
||||
data->num_pds = ARRAY_SIZE(qcom_ssc_block_pd_names);
|
||||
|
||||
/* power domains */
|
||||
ret = qcom_ssc_block_bus_pds_attach(&pdev->dev, data->pds, data->pd_names, data->num_pds);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&pdev->dev, ret, "error when attaching power domains\n");
|
||||
|
||||
ret = qcom_ssc_block_bus_pds_enable(data->pds, data->num_pds);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&pdev->dev, ret, "error when enabling power domains\n");
|
||||
|
||||
/* low level overrides for when the HW logic doesn't "just work" */
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpm_sscaon_config0");
|
||||
data->reg_mpm_sscaon_config0 = devm_ioremap_resource(&pdev->dev, res);
|
||||
@@ -343,11 +331,30 @@ static int qcom_ssc_block_bus_probe(struct platform_device *pdev)
|
||||
|
||||
data->ssc_axi_halt = halt_args.args[0];
|
||||
|
||||
/* power domains */
|
||||
data->pd_names = qcom_ssc_block_pd_names;
|
||||
data->num_pds = ARRAY_SIZE(qcom_ssc_block_pd_names);
|
||||
|
||||
ret = qcom_ssc_block_bus_pds_attach(&pdev->dev, data->pds, data->pd_names, data->num_pds);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&pdev->dev, ret, "error when attaching power domains\n");
|
||||
|
||||
ret = qcom_ssc_block_bus_pds_enable(data->pds, data->num_pds);
|
||||
if (ret < 0) {
|
||||
dev_err_probe(&pdev->dev, ret, "error when enabling power domains\n");
|
||||
goto err_detach_pds_bus;
|
||||
}
|
||||
|
||||
qcom_ssc_block_bus_init(&pdev->dev);
|
||||
|
||||
of_platform_populate(np, NULL, NULL, &pdev->dev);
|
||||
|
||||
return 0;
|
||||
|
||||
err_detach_pds_bus:
|
||||
qcom_ssc_block_bus_pds_detach(&pdev->dev, data->pds, data->num_pds);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void qcom_ssc_block_bus_remove(struct platform_device *pdev)
|
||||
@@ -356,9 +363,6 @@ static void qcom_ssc_block_bus_remove(struct platform_device *pdev)
|
||||
|
||||
qcom_ssc_block_bus_deinit(&pdev->dev);
|
||||
|
||||
iounmap(data->reg_mpm_sscaon_config0);
|
||||
iounmap(data->reg_mpm_sscaon_config1);
|
||||
|
||||
qcom_ssc_block_bus_pds_disable(data->pds, data->num_pds);
|
||||
qcom_ssc_block_bus_pds_detach(&pdev->dev, data->pds, data->num_pds);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
@@ -429,6 +429,16 @@ static const struct qcom_pdm_domain_data *sc8280xp_domains[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* Unlike SDM660, SDM630/636 lack CDSP */
|
||||
static const struct qcom_pdm_domain_data *sdm630_domains[] = {
|
||||
&adsp_audio_pd,
|
||||
&adsp_root_pd,
|
||||
&adsp_sensor_pd,
|
||||
&mpss_root_pd,
|
||||
&mpss_wlan_pd,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct qcom_pdm_domain_data *sdm660_domains[] = {
|
||||
&adsp_audio_pd,
|
||||
&adsp_root_pd,
|
||||
@@ -546,6 +556,8 @@ static const struct of_device_id qcom_pdm_domains[] __maybe_unused = {
|
||||
{ .compatible = "qcom,sc7280", .data = sc7280_domains, },
|
||||
{ .compatible = "qcom,sc8180x", .data = sc8180x_domains, },
|
||||
{ .compatible = "qcom,sc8280xp", .data = sc8280xp_domains, },
|
||||
{ .compatible = "qcom,sdm630", .data = sdm630_domains, },
|
||||
{ .compatible = "qcom,sdm636", .data = sdm630_domains, },
|
||||
{ .compatible = "qcom,sda660", .data = sdm660_domains, },
|
||||
{ .compatible = "qcom,sdm660", .data = sdm660_domains, },
|
||||
{ .compatible = "qcom,sdm670", .data = sdm670_domains, },
|
||||
|
||||
Reference in New Issue
Block a user