• Daniel Lezcano's avatar
    thermal/drivers/imx_sc: Rely on the platform data to get the resource id · 31fd4b9d
    Daniel Lezcano authored
    Currently the imx_sc driver is reimplementing part of the thermal zone
    parsing from the thermal OF tree code to get the sensor id associated
    with a thermal zone sensor.
    
    The driver platform specific code should know what sensor is present
    and not rely on the thermal zone description to do a discovery. Well
    that is arguable but all the other drivers have a per platform data
    telling what sensor id to use.
    
    The imx_sc thermal driver is the only one using a different
    approach. Not invalid but forcing to keep a specific function
    'thermal_zone_of_get_sensor_id()' to get the sensor id for a specific
    thermal zone as the self-explanatory function tells and having device
    tree code inside the driver.
    
    The thermal OF code had a rework and remains now self-encapsulated
    with a register/unregister functions and their 'devm' variants, except
    for the function mentioned above.
    
    After investigating, it appears the imx_sc sensor is defined in
    arch/arm64/boot/dts/freescale/imx8qxp.dtsi:
    
    which defines the cpu-thermal zone with the id: IMX_SC_R_SYSTEM
    
    This dtsi is included by:
     - imx8qxp-ai_ml.dts
     - imx8qxp-colibri.dtsi
     - imx8qxp-mek.dts
    
    The two first ones do not define more thermal zones
    The third one adds the pmic-thermal0 zone with id: IMX_SC_R_PMIC_0
    
    The thermal OF code returns -ENODEV if the thermal zone registration
    with a specific id fails because the description is not available in
    the DT for such a sensor id. In this case we continue with the other
    ids without bailing out with an error.
    
    So we can build for the 'fsl,imx-sc-thermal' a compatible data, an
    array of sensor ids containing IMX_SC_R_SYSTEM and IMX_SC_R_PMIC_0.
    
    The latter won't be found but that will not result in an error but a
    normal case where we continue the initialization with other ids.
    
    Just to clarify, it is what the thermal framework does and what the
    other drivers are expecting: when a registration fails with -ENODEV
    this is not an error but a case where the description is not found in
    the device tree, that be can the entire thermal zones description or a
    specific thermal zone with an unknown id.
    
    There is one small functional change but without impact. When there is
    no 'thermal-zones' description the probe function was returning
    '-ENODEV', now it returns zero. When a thermal zone fails to register
    with an error different from '-ENODEV', the error is detected and
    returned.
    
    Change the code accordingly and remove the OF code from the driver.
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20220818082316.2717095-1-daniel.lezcano@linaro.org
    31fd4b9d
imx_sc_thermal.c 3.55 KB