diff mbox

[PATCH-REPOST] thermal: of: look for sensor driver parent node if device node missing

Message ID 1406279971-14957-1-git-send-email-ldewangan@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Eduardo Valentin
Headers show

Commit Message

Laxman Dewangan July 25, 2014, 9:19 a.m. UTC
There are some mfd devices which supports junction thermal interrupt
like ams,AS3722. The DT binding of these devices are defined as the
flat and drivers for sub module of such devices are registered as
the mfd_add_devices. In this method, the sub devices registered as
platform driver and these do not have the of_node pointer on their
device structure. In this case, use the parent of_node pointer to
get the required of_node pointer.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
---
I typed differnet email ID for Eduardo and so it did not reach to him.
Resending the patch with correct ID.

 drivers/thermal/of-thermal.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Javi Merino July 25, 2014, 9:30 a.m. UTC | #1
[Fixed Eduardo's email *again*]

On Fri, Jul 25, 2014 at 10:19:31AM +0100, Laxman Dewangan wrote:
> There are some mfd devices which supports junction thermal interrupt
> like ams,AS3722. The DT binding of these devices are defined as the
> flat and drivers for sub module of such devices are registered as
> the mfd_add_devices. In this method, the sub devices registered as
> platform driver and these do not have the of_node pointer on their
> device structure. In this case, use the parent of_node pointer to
> get the required of_node pointer.
> 
> Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
> ---
> I typed differnet email ID for Eduardo and so it did not reach to him.
> Resending the patch with correct ID.
> 
>  drivers/thermal/of-thermal.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
> index 04b1be7..85a7d71 100644
> --- a/drivers/thermal/of-thermal.c
> +++ b/drivers/thermal/of-thermal.c
> @@ -396,6 +396,8 @@ thermal_zone_of_sensor_register(struct device *dev, int sensor_id,
>  		return ERR_PTR(-EINVAL);
>  
>  	sensor_np = dev->of_node;
> +	if (!sensor_np && dev->parent)
> +		sensor_np = dev->parent->of_node;
>  
>  	for_each_child_of_node(np, child) {
>  		struct of_phandle_args sensor_specs;
> -- 
> 1.8.1.5
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eduardo Valentin July 29, 2014, 2:12 p.m. UTC | #2
Hello Laxman,

On Fri, Jul 25, 2014 at 02:49:31PM +0530, Laxman Dewangan wrote:
> There are some mfd devices which supports junction thermal interrupt
> like ams,AS3722. The DT binding of these devices are defined as the
> flat and drivers for sub module of such devices are registered as
> the mfd_add_devices. In this method, the sub devices registered as
> platform driver and these do not have the of_node pointer on their
> device structure. In this case, use the parent of_node pointer to
> get the required of_node pointer.
> 

Can you please elaborate a bit more on your proposal? So, you would
append the thermal zones on the DT node of the MFD device?

To me looks like MFD becomes sowhat obsolete with DT.

Besides, to what I could see from past iterations, MFD with DT seams to
be a controvertial subject. That is, we have people that agree to have
it, and people that are not fan of it.

> Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
> ---
> I typed differnet email ID for Eduardo and so it did not reach to him.
> Resending the patch with correct ID.
> 
>  drivers/thermal/of-thermal.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
> index 04b1be7..85a7d71 100644
> --- a/drivers/thermal/of-thermal.c
> +++ b/drivers/thermal/of-thermal.c
> @@ -396,6 +396,8 @@ thermal_zone_of_sensor_register(struct device *dev, int sensor_id,
>  		return ERR_PTR(-EINVAL);
>  
>  	sensor_np = dev->of_node;
> +	if (!sensor_np && dev->parent)
> +		sensor_np = dev->parent->of_node;
>  
>  	for_each_child_of_node(np, child) {
>  		struct of_phandle_args sensor_specs;
> -- 
> 1.8.1.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Laxman Dewangan July 29, 2014, 2:23 p.m. UTC | #3
On Tuesday 29 July 2014 07:42 PM, Eduardo Valentin wrote:
> Hello Laxman,
>
> On Fri, Jul 25, 2014 at 02:49:31PM +0530, Laxman Dewangan wrote:
>> There are some mfd devices which supports junction thermal interrupt
>> like ams,AS3722. The DT binding of these devices are defined as the
>> flat and drivers for sub module of such devices are registered as
>> the mfd_add_devices. In this method, the sub devices registered as
>> platform driver and these do not have the of_node pointer on their
>> device structure. In this case, use the parent of_node pointer to
>> get the required of_node pointer.
>>
> Can you please elaborate a bit more on your proposal? So, you would
> append the thermal zones on the DT node of the MFD device?

Yes, mfd node for ams,as3722 is flat node, almost all sub-module driver 
have their property on this node only. Regulator have their own sub node 
under this node.

as3722 {
         compatible = "ams,as3722";
         #gpio-contorller;
         #gpio-cells = <2>;
     ::::::::::
         regulator {
                 ::::
         };
};


So in this, the thermal sensor driver's property is on the as3722 node 
only and thermal zone need to refer this node for sensor.

However, as3722 thermal sensor driver is register as sub mfd devices 
through mfd_add_devices() and thermal sensor drivers pdev->dev.of_node 
does not have any valid pointer.
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eduardo Valentin July 30, 2014, 1:20 p.m. UTC | #4
Laxman,

On Tue, Jul 29, 2014 at 07:53:58PM +0530, Laxman Dewangan wrote:
> On Tuesday 29 July 2014 07:42 PM, Eduardo Valentin wrote:
> > Hello Laxman,
> >
> > On Fri, Jul 25, 2014 at 02:49:31PM +0530, Laxman Dewangan wrote:
> >> There are some mfd devices which supports junction thermal interrupt
> >> like ams,AS3722. The DT binding of these devices are defined as the
> >> flat and drivers for sub module of such devices are registered as
> >> the mfd_add_devices. In this method, the sub devices registered as
> >> platform driver and these do not have the of_node pointer on their
> >> device structure. In this case, use the parent of_node pointer to
> >> get the required of_node pointer.
> >>
> > Can you please elaborate a bit more on your proposal? So, you would
> > append the thermal zones on the DT node of the MFD device?
> 
> Yes, mfd node for ams,as3722 is flat node, almost all sub-module driver 
> have their property on this node only. Regulator have their own sub node 
> under this node.
> 
> as3722 {
>          compatible = "ams,as3722";
>          #gpio-contorller;
>          #gpio-cells = <2>;
>      ::::::::::
>          regulator {
>                  ::::
>          };
> };
> 
> 
> So in this, the thermal sensor driver's property is on the as3722 node 
> only and thermal zone need to refer this node for sensor.
> 
> However, as3722 thermal sensor driver is register as sub mfd devices 
> through mfd_add_devices() and thermal sensor drivers pdev->dev.of_node 
> does not have any valid pointer.

In such case, the MFD driver shall populate the required data while
creating the sub device, right?

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
index 04b1be7..85a7d71 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -396,6 +396,8 @@  thermal_zone_of_sensor_register(struct device *dev, int sensor_id,
 		return ERR_PTR(-EINVAL);
 
 	sensor_np = dev->of_node;
+	if (!sensor_np && dev->parent)
+		sensor_np = dev->parent->of_node;
 
 	for_each_child_of_node(np, child) {
 		struct of_phandle_args sensor_specs;