diff mbox series

[2/2] hwmon: (ntc_thermistor): add support for B57891S0103 from Epcos

Message ID 20181117121248.32143-2-peda@axentia.se (mailing list archive)
State Accepted
Headers show
Series [1/2] dt-bindings: hwmon: add B57891S0103 thermistor from Epcos | expand

Commit Message

Peter Rosin Nov. 17, 2018, 12:13 p.m. UTC
More of the same...

Signed-off-by: Peter Rosin <peda@axentia.se>
---
 drivers/hwmon/Kconfig                        |  3 +-
 drivers/hwmon/ntc_thermistor.c               | 57 +++++++++++++++++++++++++++-
 include/linux/platform_data/ntc_thermistor.h |  1 +
 3 files changed, 58 insertions(+), 3 deletions(-)

Comments

Guenter Roeck Nov. 19, 2018, 5:07 p.m. UTC | #1
On Sat, Nov 17, 2018 at 12:13:00PM +0000, Peter Rosin wrote:
> More of the same...
> 
> Signed-off-by: Peter Rosin <peda@axentia.se>
> ---
>  drivers/hwmon/Kconfig                        |  3 +-
>  drivers/hwmon/ntc_thermistor.c               | 57 +++++++++++++++++++++++++++-
>  include/linux/platform_data/ntc_thermistor.h |  1 +
>  3 files changed, 58 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index f10840ad465c..5438cecace22 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -1206,7 +1206,8 @@ config SENSORS_NTC_THERMISTOR
>  
>  	  Currently, this driver supports
>  	  NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333,
> -	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 from EPCOS.
> +	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 and
> +	  B57891S0103 from EPCOS.
>  
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called ntc-thermistor.
> diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
> index c52d07c6b49f..e0c6b2f244a6 100644
> --- a/drivers/hwmon/ntc_thermistor.c
> +++ b/drivers/hwmon/ntc_thermistor.c
> @@ -55,6 +55,7 @@ static const struct platform_device_id ntc_thermistor_id[] = {
>  	{ "b57330v2103", TYPE_B57330V2103},
>  	{ "ncp03wf104", TYPE_NCPXXWF104 },
>  	{ "ncp15xh103", TYPE_NCPXXXH103 },
> +	{ "b57891s0103", TYPE_B57891S0103 },
>  	{ },
>  };
>  
> @@ -212,8 +213,8 @@ static const struct ntc_compensation ncpXXxh103[] = {
>  };
>  
>  /*
> - * The following compensation table is from the specification of EPCOS NTC
> - * Thermistors Datasheet
> + * The following compensation tables are from the specifications in EPCOS NTC
> + * Thermistors Datasheets
>   */
>  static const struct ntc_compensation b57330v2103[] = {
>  	{ .temp_c	= -40, .ohm	= 190030 },
> @@ -252,6 +253,52 @@ static const struct ntc_compensation b57330v2103[] = {
>  	{ .temp_c	= 125, .ohm	= 531 },
>  };
>  
> +static const struct ntc_compensation b57891s0103[] = {
> +	{ .temp_c	= -55.0, .ohm	= 878900 },
> +	{ .temp_c	= -50.0, .ohm	= 617590 },
> +	{ .temp_c	= -45.0, .ohm	= 439340 },
> +	{ .temp_c	= -40.0, .ohm	= 316180 },
> +	{ .temp_c	= -35.0, .ohm	= 230060 },
> +	{ .temp_c	= -30.0, .ohm	= 169150 },
> +	{ .temp_c	= -25.0, .ohm	= 125550 },
> +	{ .temp_c	= -20.0, .ohm	= 94143 },
> +	{ .temp_c	= -15.0, .ohm	= 71172 },
> +	{ .temp_c	= -10.0, .ohm	= 54308 },
> +	{ .temp_c	= -5.0, .ohm	= 41505 },
> +	{ .temp_c	= 0.0, .ohm	= 32014 },
> +	{ .temp_c	= 5.0, .ohm	= 25011 },
> +	{ .temp_c	= 10.0, .ohm	= 19691 },
> +	{ .temp_c	= 15.0, .ohm	= 15618 },
> +	{ .temp_c	= 20.0, .ohm	= 12474 },
> +	{ .temp_c	= 25.0, .ohm	= 10000 },
> +	{ .temp_c	= 30.0, .ohm	= 8080 },
> +	{ .temp_c	= 35.0, .ohm	= 6569 },
> +	{ .temp_c	= 40.0, .ohm	= 5372 },
> +	{ .temp_c	= 45.0, .ohm	= 4424 },
> +	{ .temp_c	= 50.0, .ohm	= 3661 },
> +	{ .temp_c	= 55.0, .ohm	= 3039 },
> +	{ .temp_c	= 60.0, .ohm	= 2536 },
> +	{ .temp_c	= 65.0, .ohm	= 2128 },
> +	{ .temp_c	= 70.0, .ohm	= 1794 },
> +	{ .temp_c	= 75.0, .ohm	= 1518 },
> +	{ .temp_c	= 80.0, .ohm	= 1290 },
> +	{ .temp_c	= 85.0, .ohm	= 1100 },
> +	{ .temp_c	= 90.0, .ohm	= 942 },
> +	{ .temp_c	= 95.0, .ohm	= 809 },
> +	{ .temp_c	= 100.0, .ohm	= 697 },
> +	{ .temp_c	= 105.0, .ohm	= 604 },
> +	{ .temp_c	= 110.0, .ohm	= 525 },
> +	{ .temp_c	= 115.0, .ohm	= 457 },
> +	{ .temp_c	= 120.0, .ohm	= 400 },
> +	{ .temp_c	= 125.0, .ohm	= 351 },
> +	{ .temp_c	= 130.0, .ohm	= 308 },
> +	{ .temp_c	= 135.0, .ohm	= 272 },
> +	{ .temp_c	= 140.0, .ohm	= 240 },
> +	{ .temp_c	= 145.0, .ohm	= 213 },
> +	{ .temp_c	= 150.0, .ohm	= 189 },
> +	{ .temp_c	= 155.0, .ohm	= 168 },
> +};
> +
>  struct ntc_data {
>  	struct ntc_thermistor_platform_data *pdata;
>  	const struct ntc_compensation *comp;
> @@ -296,6 +343,8 @@ static const struct of_device_id ntc_match[] = {
>  		.data = &ntc_thermistor_id[6] },
>  	{ .compatible = "murata,ncp15xh103",
>  		.data = &ntc_thermistor_id[7] },
> +	{ .compatible = "epcos,b57891s0103",
> +		.data = &ntc_thermistor_id[8] },
>  
>  	/* Usage of vendor name "ntc" is deprecated */
>  	{ .compatible = "ntc,ncp15wb473",
> @@ -627,6 +676,10 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
>  		data->comp = ncpXXxh103;
>  		data->n_comp = ARRAY_SIZE(ncpXXxh103);
>  		break;
> +	case TYPE_B57891S0103:
> +		data->comp = b57891s0103;
> +		data->n_comp = ARRAY_SIZE(b57891s0103);
> +		break;
>  	default:
>  		dev_err(dev, "Unknown device type: %lu(%s)\n",
>  				pdev_id->driver_data, pdev_id->name);
> diff --git a/include/linux/platform_data/ntc_thermistor.h b/include/linux/platform_data/ntc_thermistor.h
> index 698d0d59db76..231a27c302ec 100644
> --- a/include/linux/platform_data/ntc_thermistor.h
> +++ b/include/linux/platform_data/ntc_thermistor.h
> @@ -29,6 +29,7 @@ enum ntc_thermistor_type {
>  	TYPE_B57330V2103,
>  	TYPE_NCPXXWF104,
>  	TYPE_NCPXXXH103,
> +	TYPE_B57891S0103,

Guess I deserve the non-alphabetic order as penalty for not enforcing it 
earlier. I'll accept the patch after DT approval and submit another one
myself afterwards to restore alphabetic order.

Guenter

>  };
>  
>  struct ntc_thermistor_platform_data {
> -- 
> 2.11.0
>
Peter Rosin Nov. 19, 2018, 9:16 p.m. UTC | #2
On 2018-11-19 18:07, Guenter Roeck wrote:
> On Sat, Nov 17, 2018 at 12:13:00PM +0000, Peter Rosin wrote:
>> More of the same...
>>
>> Signed-off-by: Peter Rosin <peda@axentia.se>
>> ---
>>  drivers/hwmon/Kconfig                        |  3 +-
>>  drivers/hwmon/ntc_thermistor.c               | 57 +++++++++++++++++++++++++++-
>>  include/linux/platform_data/ntc_thermistor.h |  1 +
>>  3 files changed, 58 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
>> index f10840ad465c..5438cecace22 100644
>> --- a/drivers/hwmon/Kconfig
>> +++ b/drivers/hwmon/Kconfig
>> @@ -1206,7 +1206,8 @@ config SENSORS_NTC_THERMISTOR
>>  
>>  	  Currently, this driver supports
>>  	  NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333,
>> -	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 from EPCOS.
>> +	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 and
>> +	  B57891S0103 from EPCOS.
>>  
>>  	  This driver can also be built as a module.  If so, the module
>>  	  will be called ntc-thermistor.
>> diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
>> index c52d07c6b49f..e0c6b2f244a6 100644
>> --- a/drivers/hwmon/ntc_thermistor.c
>> +++ b/drivers/hwmon/ntc_thermistor.c
>> @@ -55,6 +55,7 @@ static const struct platform_device_id ntc_thermistor_id[] = {
>>  	{ "b57330v2103", TYPE_B57330V2103},
>>  	{ "ncp03wf104", TYPE_NCPXXWF104 },
>>  	{ "ncp15xh103", TYPE_NCPXXXH103 },
>> +	{ "b57891s0103", TYPE_B57891S0103 },
>>  	{ },
>>  };
>>  
>> @@ -212,8 +213,8 @@ static const struct ntc_compensation ncpXXxh103[] = {
>>  };
>>  
>>  /*
>> - * The following compensation table is from the specification of EPCOS NTC
>> - * Thermistors Datasheet
>> + * The following compensation tables are from the specifications in EPCOS NTC
>> + * Thermistors Datasheets
>>   */
>>  static const struct ntc_compensation b57330v2103[] = {
>>  	{ .temp_c	= -40, .ohm	= 190030 },
>> @@ -252,6 +253,52 @@ static const struct ntc_compensation b57330v2103[] = {
>>  	{ .temp_c	= 125, .ohm	= 531 },
>>  };
>>  
>> +static const struct ntc_compensation b57891s0103[] = {
>> +	{ .temp_c	= -55.0, .ohm	= 878900 },
>> +	{ .temp_c	= -50.0, .ohm	= 617590 },
>> +	{ .temp_c	= -45.0, .ohm	= 439340 },
>> +	{ .temp_c	= -40.0, .ohm	= 316180 },
>> +	{ .temp_c	= -35.0, .ohm	= 230060 },
>> +	{ .temp_c	= -30.0, .ohm	= 169150 },
>> +	{ .temp_c	= -25.0, .ohm	= 125550 },
>> +	{ .temp_c	= -20.0, .ohm	= 94143 },
>> +	{ .temp_c	= -15.0, .ohm	= 71172 },
>> +	{ .temp_c	= -10.0, .ohm	= 54308 },
>> +	{ .temp_c	= -5.0, .ohm	= 41505 },
>> +	{ .temp_c	= 0.0, .ohm	= 32014 },
>> +	{ .temp_c	= 5.0, .ohm	= 25011 },
>> +	{ .temp_c	= 10.0, .ohm	= 19691 },
>> +	{ .temp_c	= 15.0, .ohm	= 15618 },
>> +	{ .temp_c	= 20.0, .ohm	= 12474 },
>> +	{ .temp_c	= 25.0, .ohm	= 10000 },
>> +	{ .temp_c	= 30.0, .ohm	= 8080 },
>> +	{ .temp_c	= 35.0, .ohm	= 6569 },
>> +	{ .temp_c	= 40.0, .ohm	= 5372 },
>> +	{ .temp_c	= 45.0, .ohm	= 4424 },
>> +	{ .temp_c	= 50.0, .ohm	= 3661 },
>> +	{ .temp_c	= 55.0, .ohm	= 3039 },
>> +	{ .temp_c	= 60.0, .ohm	= 2536 },
>> +	{ .temp_c	= 65.0, .ohm	= 2128 },
>> +	{ .temp_c	= 70.0, .ohm	= 1794 },
>> +	{ .temp_c	= 75.0, .ohm	= 1518 },
>> +	{ .temp_c	= 80.0, .ohm	= 1290 },
>> +	{ .temp_c	= 85.0, .ohm	= 1100 },
>> +	{ .temp_c	= 90.0, .ohm	= 942 },
>> +	{ .temp_c	= 95.0, .ohm	= 809 },
>> +	{ .temp_c	= 100.0, .ohm	= 697 },
>> +	{ .temp_c	= 105.0, .ohm	= 604 },
>> +	{ .temp_c	= 110.0, .ohm	= 525 },
>> +	{ .temp_c	= 115.0, .ohm	= 457 },
>> +	{ .temp_c	= 120.0, .ohm	= 400 },
>> +	{ .temp_c	= 125.0, .ohm	= 351 },
>> +	{ .temp_c	= 130.0, .ohm	= 308 },
>> +	{ .temp_c	= 135.0, .ohm	= 272 },
>> +	{ .temp_c	= 140.0, .ohm	= 240 },
>> +	{ .temp_c	= 145.0, .ohm	= 213 },
>> +	{ .temp_c	= 150.0, .ohm	= 189 },
>> +	{ .temp_c	= 155.0, .ohm	= 168 },
>> +};
>> +
>>  struct ntc_data {
>>  	struct ntc_thermistor_platform_data *pdata;
>>  	const struct ntc_compensation *comp;
>> @@ -296,6 +343,8 @@ static const struct of_device_id ntc_match[] = {
>>  		.data = &ntc_thermistor_id[6] },
>>  	{ .compatible = "murata,ncp15xh103",
>>  		.data = &ntc_thermistor_id[7] },
>> +	{ .compatible = "epcos,b57891s0103",
>> +		.data = &ntc_thermistor_id[8] },
>>  
>>  	/* Usage of vendor name "ntc" is deprecated */
>>  	{ .compatible = "ntc,ncp15wb473",
>> @@ -627,6 +676,10 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
>>  		data->comp = ncpXXxh103;
>>  		data->n_comp = ARRAY_SIZE(ncpXXxh103);
>>  		break;
>> +	case TYPE_B57891S0103:
>> +		data->comp = b57891s0103;
>> +		data->n_comp = ARRAY_SIZE(b57891s0103);
>> +		break;
>>  	default:
>>  		dev_err(dev, "Unknown device type: %lu(%s)\n",
>>  				pdev_id->driver_data, pdev_id->name);
>> diff --git a/include/linux/platform_data/ntc_thermistor.h b/include/linux/platform_data/ntc_thermistor.h
>> index 698d0d59db76..231a27c302ec 100644
>> --- a/include/linux/platform_data/ntc_thermistor.h
>> +++ b/include/linux/platform_data/ntc_thermistor.h
>> @@ -29,6 +29,7 @@ enum ntc_thermistor_type {
>>  	TYPE_B57330V2103,
>>  	TYPE_NCPXXWF104,
>>  	TYPE_NCPXXXH103,
>> +	TYPE_B57891S0103,
> 
> Guess I deserve the non-alphabetic order as penalty for not enforcing it 
> earlier. I'll accept the patch after DT approval and submit another one
> myself afterwards to restore alphabetic order.

Right, I'm thinking another good change would be to introduce an enum
into the ntc_thermistor_id array, because the hard-coded numbering in
the ntc_match variable is a bit fragile in my taste, and that list would
also benefit from being alphabetic. Currently there's simply no way to
add things in the middle without causing mayhem. I thought about doing
that, but didn't want to waste energy doing it up front without knowing
if it would be well received (the driver might have been superseded or
something). I'm glad that you have volunteered to clean things up.
Ha! :-)

Cheers,
Peter

> Guenter
> 
>>  };
>>  
>>  struct ntc_thermistor_platform_data {
>> -- 
>> 2.11.0
>>
Guenter Roeck Nov. 19, 2018, 9:28 p.m. UTC | #3
On Mon, Nov 19, 2018 at 09:16:12PM +0000, Peter Rosin wrote:
> > 
> > Guess I deserve the non-alphabetic order as penalty for not enforcing it 
> > earlier. I'll accept the patch after DT approval and submit another one
> > myself afterwards to restore alphabetic order.
> 
> Right, I'm thinking another good change would be to introduce an enum
> into the ntc_thermistor_id array, because the hard-coded numbering in

Yes, sounds like a good idea.

> the ntc_match variable is a bit fragile in my taste, and that list would
> also benefit from being alphabetic. Currently there's simply no way to
> add things in the middle without causing mayhem. I thought about doing
> that, but didn't want to waste energy doing it up front without knowing
> if it would be well received (the driver might have been superseded or

It would.

Guenter

> something). I'm glad that you have volunteered to clean things up.
> Ha! :-)
> 
> Cheers,
> Peter
> 
> > Guenter
> > 
> >>  };
> >>  
> >>  struct ntc_thermistor_platform_data {
> >> -- 
> >> 2.11.0
> >>
>
Peter Rosin Nov. 21, 2018, 6:06 a.m. UTC | #4
On 2018-11-19 22:28, Guenter Roeck wrote:
> On Mon, Nov 19, 2018 at 09:16:12PM +0000, Peter Rosin wrote:
>>>
>>> Guess I deserve the non-alphabetic order as penalty for not enforcing it 
>>> earlier. I'll accept the patch after DT approval and submit another one
>>> myself afterwards to restore alphabetic order.
>>
>> Right, I'm thinking another good change would be to introduce an enum
>> into the ntc_thermistor_id array, because the hard-coded numbering in
> 
> Yes, sounds like a good idea.
> 
>> the ntc_match variable is a bit fragile in my taste, and that list would
>> also benefit from being alphabetic. Currently there's simply no way to
>> add things in the middle without causing mayhem. I thought about doing
>> that, but didn't want to waste energy doing it up front without knowing
>> if it would be well received (the driver might have been superseded or
> 
> It would.

Right, so I have some patches sorting things out... However, one question
before I send them: Is it ok to sort the enum ntc_thermistor_type in the
include/linux/platform_data/ntc_thermistor.h header or will that break
stuff?

Cheers,
Peter

> Guenter
> 
>> something). I'm glad that you have volunteered to clean things up.
>> Ha! :-)
>>
>> Cheers,
>> Peter
>>
>>> Guenter
>>>
>>>>  };
>>>>  
>>>>  struct ntc_thermistor_platform_data {
>>>> -- 
>>>> 2.11.0
>>>>
>>
Guenter Roeck Nov. 21, 2018, 8:42 a.m. UTC | #5
On 11/20/18 10:06 PM, Peter Rosin wrote:
> On 2018-11-19 22:28, Guenter Roeck wrote:
>> On Mon, Nov 19, 2018 at 09:16:12PM +0000, Peter Rosin wrote:
>>>>
>>>> Guess I deserve the non-alphabetic order as penalty for not enforcing it
>>>> earlier. I'll accept the patch after DT approval and submit another one
>>>> myself afterwards to restore alphabetic order.
>>>
>>> Right, I'm thinking another good change would be to introduce an enum
>>> into the ntc_thermistor_id array, because the hard-coded numbering in
>>
>> Yes, sounds like a good idea.
>>
>>> the ntc_match variable is a bit fragile in my taste, and that list would
>>> also benefit from being alphabetic. Currently there's simply no way to
>>> add things in the middle without causing mayhem. I thought about doing
>>> that, but didn't want to waste energy doing it up front without knowing
>>> if it would be well received (the driver might have been superseded or
>>
>> It would.
> 
> Right, so I have some patches sorting things out... However, one question

Sounds good.

> before I send them: Is it ok to sort the enum ntc_thermistor_type in the
> include/linux/platform_data/ntc_thermistor.h header or will that break
> stuff?
> 

Should be ok. It is not an UAPI, after all.

Guenter

> Cheers,
> Peter
> 
>> Guenter
>>
>>> something). I'm glad that you have volunteered to clean things up.
>>> Ha! :-)
>>>
>>> Cheers,
>>> Peter
>>>
>>>> Guenter
>>>>
>>>>>   };
>>>>>   
>>>>>   struct ntc_thermistor_platform_data {
>>>>> -- 
>>>>> 2.11.0
>>>>>
>>>
>
Guenter Roeck Dec. 1, 2018, 6:38 p.m. UTC | #6
On Sat, Nov 17, 2018 at 12:13:00PM +0000, Peter Rosin wrote:
> More of the same...
> 
> Signed-off-by: Peter Rosin <peda@axentia.se>

Applied to hwmon-next.

Thanks,
Guenter

> ---
>  drivers/hwmon/Kconfig                        |  3 +-
>  drivers/hwmon/ntc_thermistor.c               | 57 +++++++++++++++++++++++++++-
>  include/linux/platform_data/ntc_thermistor.h |  1 +
>  3 files changed, 58 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index f10840ad465c..5438cecace22 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -1206,7 +1206,8 @@ config SENSORS_NTC_THERMISTOR
>  
>  	  Currently, this driver supports
>  	  NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333,
> -	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 from EPCOS.
> +	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 and
> +	  B57891S0103 from EPCOS.
>  
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called ntc-thermistor.
> diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
> index c52d07c6b49f..e0c6b2f244a6 100644
> --- a/drivers/hwmon/ntc_thermistor.c
> +++ b/drivers/hwmon/ntc_thermistor.c
> @@ -55,6 +55,7 @@ static const struct platform_device_id ntc_thermistor_id[] = {
>  	{ "b57330v2103", TYPE_B57330V2103},
>  	{ "ncp03wf104", TYPE_NCPXXWF104 },
>  	{ "ncp15xh103", TYPE_NCPXXXH103 },
> +	{ "b57891s0103", TYPE_B57891S0103 },
>  	{ },
>  };
>  
> @@ -212,8 +213,8 @@ static const struct ntc_compensation ncpXXxh103[] = {
>  };
>  
>  /*
> - * The following compensation table is from the specification of EPCOS NTC
> - * Thermistors Datasheet
> + * The following compensation tables are from the specifications in EPCOS NTC
> + * Thermistors Datasheets
>   */
>  static const struct ntc_compensation b57330v2103[] = {
>  	{ .temp_c	= -40, .ohm	= 190030 },
> @@ -252,6 +253,52 @@ static const struct ntc_compensation b57330v2103[] = {
>  	{ .temp_c	= 125, .ohm	= 531 },
>  };
>  
> +static const struct ntc_compensation b57891s0103[] = {
> +	{ .temp_c	= -55.0, .ohm	= 878900 },
> +	{ .temp_c	= -50.0, .ohm	= 617590 },
> +	{ .temp_c	= -45.0, .ohm	= 439340 },
> +	{ .temp_c	= -40.0, .ohm	= 316180 },
> +	{ .temp_c	= -35.0, .ohm	= 230060 },
> +	{ .temp_c	= -30.0, .ohm	= 169150 },
> +	{ .temp_c	= -25.0, .ohm	= 125550 },
> +	{ .temp_c	= -20.0, .ohm	= 94143 },
> +	{ .temp_c	= -15.0, .ohm	= 71172 },
> +	{ .temp_c	= -10.0, .ohm	= 54308 },
> +	{ .temp_c	= -5.0, .ohm	= 41505 },
> +	{ .temp_c	= 0.0, .ohm	= 32014 },
> +	{ .temp_c	= 5.0, .ohm	= 25011 },
> +	{ .temp_c	= 10.0, .ohm	= 19691 },
> +	{ .temp_c	= 15.0, .ohm	= 15618 },
> +	{ .temp_c	= 20.0, .ohm	= 12474 },
> +	{ .temp_c	= 25.0, .ohm	= 10000 },
> +	{ .temp_c	= 30.0, .ohm	= 8080 },
> +	{ .temp_c	= 35.0, .ohm	= 6569 },
> +	{ .temp_c	= 40.0, .ohm	= 5372 },
> +	{ .temp_c	= 45.0, .ohm	= 4424 },
> +	{ .temp_c	= 50.0, .ohm	= 3661 },
> +	{ .temp_c	= 55.0, .ohm	= 3039 },
> +	{ .temp_c	= 60.0, .ohm	= 2536 },
> +	{ .temp_c	= 65.0, .ohm	= 2128 },
> +	{ .temp_c	= 70.0, .ohm	= 1794 },
> +	{ .temp_c	= 75.0, .ohm	= 1518 },
> +	{ .temp_c	= 80.0, .ohm	= 1290 },
> +	{ .temp_c	= 85.0, .ohm	= 1100 },
> +	{ .temp_c	= 90.0, .ohm	= 942 },
> +	{ .temp_c	= 95.0, .ohm	= 809 },
> +	{ .temp_c	= 100.0, .ohm	= 697 },
> +	{ .temp_c	= 105.0, .ohm	= 604 },
> +	{ .temp_c	= 110.0, .ohm	= 525 },
> +	{ .temp_c	= 115.0, .ohm	= 457 },
> +	{ .temp_c	= 120.0, .ohm	= 400 },
> +	{ .temp_c	= 125.0, .ohm	= 351 },
> +	{ .temp_c	= 130.0, .ohm	= 308 },
> +	{ .temp_c	= 135.0, .ohm	= 272 },
> +	{ .temp_c	= 140.0, .ohm	= 240 },
> +	{ .temp_c	= 145.0, .ohm	= 213 },
> +	{ .temp_c	= 150.0, .ohm	= 189 },
> +	{ .temp_c	= 155.0, .ohm	= 168 },
> +};
> +
>  struct ntc_data {
>  	struct ntc_thermistor_platform_data *pdata;
>  	const struct ntc_compensation *comp;
> @@ -296,6 +343,8 @@ static const struct of_device_id ntc_match[] = {
>  		.data = &ntc_thermistor_id[6] },
>  	{ .compatible = "murata,ncp15xh103",
>  		.data = &ntc_thermistor_id[7] },
> +	{ .compatible = "epcos,b57891s0103",
> +		.data = &ntc_thermistor_id[8] },
>  
>  	/* Usage of vendor name "ntc" is deprecated */
>  	{ .compatible = "ntc,ncp15wb473",
> @@ -627,6 +676,10 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
>  		data->comp = ncpXXxh103;
>  		data->n_comp = ARRAY_SIZE(ncpXXxh103);
>  		break;
> +	case TYPE_B57891S0103:
> +		data->comp = b57891s0103;
> +		data->n_comp = ARRAY_SIZE(b57891s0103);
> +		break;
>  	default:
>  		dev_err(dev, "Unknown device type: %lu(%s)\n",
>  				pdev_id->driver_data, pdev_id->name);
> diff --git a/include/linux/platform_data/ntc_thermistor.h b/include/linux/platform_data/ntc_thermistor.h
> index 698d0d59db76..231a27c302ec 100644
> --- a/include/linux/platform_data/ntc_thermistor.h
> +++ b/include/linux/platform_data/ntc_thermistor.h
> @@ -29,6 +29,7 @@ enum ntc_thermistor_type {
>  	TYPE_B57330V2103,
>  	TYPE_NCPXXWF104,
>  	TYPE_NCPXXXH103,
> +	TYPE_B57891S0103,
>  };
>  
>  struct ntc_thermistor_platform_data {
diff mbox series

Patch

diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index f10840ad465c..5438cecace22 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -1206,7 +1206,8 @@  config SENSORS_NTC_THERMISTOR
 
 	  Currently, this driver supports
 	  NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333,
-	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 from EPCOS.
+	  NCP03WF104 and NCP15XH103 from Murata and B57330V2103 and
+	  B57891S0103 from EPCOS.
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called ntc-thermistor.
diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
index c52d07c6b49f..e0c6b2f244a6 100644
--- a/drivers/hwmon/ntc_thermistor.c
+++ b/drivers/hwmon/ntc_thermistor.c
@@ -55,6 +55,7 @@  static const struct platform_device_id ntc_thermistor_id[] = {
 	{ "b57330v2103", TYPE_B57330V2103},
 	{ "ncp03wf104", TYPE_NCPXXWF104 },
 	{ "ncp15xh103", TYPE_NCPXXXH103 },
+	{ "b57891s0103", TYPE_B57891S0103 },
 	{ },
 };
 
@@ -212,8 +213,8 @@  static const struct ntc_compensation ncpXXxh103[] = {
 };
 
 /*
- * The following compensation table is from the specification of EPCOS NTC
- * Thermistors Datasheet
+ * The following compensation tables are from the specifications in EPCOS NTC
+ * Thermistors Datasheets
  */
 static const struct ntc_compensation b57330v2103[] = {
 	{ .temp_c	= -40, .ohm	= 190030 },
@@ -252,6 +253,52 @@  static const struct ntc_compensation b57330v2103[] = {
 	{ .temp_c	= 125, .ohm	= 531 },
 };
 
+static const struct ntc_compensation b57891s0103[] = {
+	{ .temp_c	= -55.0, .ohm	= 878900 },
+	{ .temp_c	= -50.0, .ohm	= 617590 },
+	{ .temp_c	= -45.0, .ohm	= 439340 },
+	{ .temp_c	= -40.0, .ohm	= 316180 },
+	{ .temp_c	= -35.0, .ohm	= 230060 },
+	{ .temp_c	= -30.0, .ohm	= 169150 },
+	{ .temp_c	= -25.0, .ohm	= 125550 },
+	{ .temp_c	= -20.0, .ohm	= 94143 },
+	{ .temp_c	= -15.0, .ohm	= 71172 },
+	{ .temp_c	= -10.0, .ohm	= 54308 },
+	{ .temp_c	= -5.0, .ohm	= 41505 },
+	{ .temp_c	= 0.0, .ohm	= 32014 },
+	{ .temp_c	= 5.0, .ohm	= 25011 },
+	{ .temp_c	= 10.0, .ohm	= 19691 },
+	{ .temp_c	= 15.0, .ohm	= 15618 },
+	{ .temp_c	= 20.0, .ohm	= 12474 },
+	{ .temp_c	= 25.0, .ohm	= 10000 },
+	{ .temp_c	= 30.0, .ohm	= 8080 },
+	{ .temp_c	= 35.0, .ohm	= 6569 },
+	{ .temp_c	= 40.0, .ohm	= 5372 },
+	{ .temp_c	= 45.0, .ohm	= 4424 },
+	{ .temp_c	= 50.0, .ohm	= 3661 },
+	{ .temp_c	= 55.0, .ohm	= 3039 },
+	{ .temp_c	= 60.0, .ohm	= 2536 },
+	{ .temp_c	= 65.0, .ohm	= 2128 },
+	{ .temp_c	= 70.0, .ohm	= 1794 },
+	{ .temp_c	= 75.0, .ohm	= 1518 },
+	{ .temp_c	= 80.0, .ohm	= 1290 },
+	{ .temp_c	= 85.0, .ohm	= 1100 },
+	{ .temp_c	= 90.0, .ohm	= 942 },
+	{ .temp_c	= 95.0, .ohm	= 809 },
+	{ .temp_c	= 100.0, .ohm	= 697 },
+	{ .temp_c	= 105.0, .ohm	= 604 },
+	{ .temp_c	= 110.0, .ohm	= 525 },
+	{ .temp_c	= 115.0, .ohm	= 457 },
+	{ .temp_c	= 120.0, .ohm	= 400 },
+	{ .temp_c	= 125.0, .ohm	= 351 },
+	{ .temp_c	= 130.0, .ohm	= 308 },
+	{ .temp_c	= 135.0, .ohm	= 272 },
+	{ .temp_c	= 140.0, .ohm	= 240 },
+	{ .temp_c	= 145.0, .ohm	= 213 },
+	{ .temp_c	= 150.0, .ohm	= 189 },
+	{ .temp_c	= 155.0, .ohm	= 168 },
+};
+
 struct ntc_data {
 	struct ntc_thermistor_platform_data *pdata;
 	const struct ntc_compensation *comp;
@@ -296,6 +343,8 @@  static const struct of_device_id ntc_match[] = {
 		.data = &ntc_thermistor_id[6] },
 	{ .compatible = "murata,ncp15xh103",
 		.data = &ntc_thermistor_id[7] },
+	{ .compatible = "epcos,b57891s0103",
+		.data = &ntc_thermistor_id[8] },
 
 	/* Usage of vendor name "ntc" is deprecated */
 	{ .compatible = "ntc,ncp15wb473",
@@ -627,6 +676,10 @@  static int ntc_thermistor_probe(struct platform_device *pdev)
 		data->comp = ncpXXxh103;
 		data->n_comp = ARRAY_SIZE(ncpXXxh103);
 		break;
+	case TYPE_B57891S0103:
+		data->comp = b57891s0103;
+		data->n_comp = ARRAY_SIZE(b57891s0103);
+		break;
 	default:
 		dev_err(dev, "Unknown device type: %lu(%s)\n",
 				pdev_id->driver_data, pdev_id->name);
diff --git a/include/linux/platform_data/ntc_thermistor.h b/include/linux/platform_data/ntc_thermistor.h
index 698d0d59db76..231a27c302ec 100644
--- a/include/linux/platform_data/ntc_thermistor.h
+++ b/include/linux/platform_data/ntc_thermistor.h
@@ -29,6 +29,7 @@  enum ntc_thermistor_type {
 	TYPE_B57330V2103,
 	TYPE_NCPXXWF104,
 	TYPE_NCPXXXH103,
+	TYPE_B57891S0103,
 };
 
 struct ntc_thermistor_platform_data {