Re: [PATCH v3 3/3] hwmon: powr1220: Add support for Lattice's POWR1014 power manager IC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jan 18, 2022 at 09:56:11AM +0200, michaelsh@xxxxxxxxxx wrote:
> From: Michael Shych <michaelsh@xxxxxxxxxx>
> 
> This patch adds support for Lattice's POWR1014 power manager IC.
> Read access to all the ADCs on the chip are supported through
> the "hwmon" "sysfs" files.
> 
> The main differences of POWR1014 compared to POWR1220 are
> amount of VMON input lines: 10 on POWR1014 and 12 lines on POWR1220 and
> number of output control signals: 14 on POWR1014 and 20 on POWR1220.
> 
> Signed-off-by: Michael Shych <michaelsh@xxxxxxxxxx>
> Reviewed-by: Vadim Pasternak <vadimp@xxxxxxxxxx>

Applied.

Thanks,
Guenter

> ---
> v2->v3
> Fixes according to Guenter Roeck notes
> 1. Correct commit notes.
> 2. Don't use usleep_range
> 3. Change devicenames in alphanumeric order.
> 4. Chanhge if statement
> v1->v2
> Fix added by Michael: Fix incorrect device id.
> ---
>  drivers/hwmon/powr1220.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hwmon/powr1220.c b/drivers/hwmon/powr1220.c
> index 1d4e005977b6..2a5e168a52a9 100644
> --- a/drivers/hwmon/powr1220.c
> +++ b/drivers/hwmon/powr1220.c
> @@ -22,6 +22,8 @@
>  #define ADC_STEP_MV			2
>  #define ADC_MAX_LOW_MEASUREMENT_MV	2000
>  
> +enum powr1xxx_chips { powr1014, powr1220 };
> +
>  enum powr1220_regs {
>  	VMON_STATUS0,
>  	VMON_STATUS1,
> @@ -74,6 +76,7 @@ enum powr1220_adc_values {
>  struct powr1220_data {
>  	struct i2c_client *client;
>  	struct mutex update_lock;
> +	u8 max_channels;
>  	bool adc_valid[MAX_POWR1220_ADC_VALUES];
>  	 /* the next value is in jiffies */
>  	unsigned long adc_last_updated[MAX_POWR1220_ADC_VALUES];
> @@ -171,6 +174,11 @@ static umode_t
>  powr1220_is_visible(const void *data, enum hwmon_sensor_types type, u32
>  		    attr, int channel)
>  {
> +	struct powr1220_data *chip_data = (struct powr1220_data *)data;
> +
> +	if (channel >= chip_data->max_channels)
> +		return 0;
> +
>  	switch (type) {
>  	case hwmon_in:
>  		switch (attr) {
> @@ -271,6 +279,8 @@ static const struct hwmon_chip_info powr1220_chip_info = {
>  	.info = powr1220_info,
>  };
>  
> +static const struct i2c_device_id powr1220_ids[];
> +
>  static int powr1220_probe(struct i2c_client *client)
>  {
>  	struct powr1220_data *data;
> @@ -283,6 +293,15 @@ static int powr1220_probe(struct i2c_client *client)
>  	if (!data)
>  		return -ENOMEM;
>  
> +	switch (i2c_match_id(powr1220_ids, client)->driver_data) {
> +	case powr1014:
> +		data->max_channels = 10;
> +		break;
> +	default:
> +		data->max_channels = 12;
> +		break;
> +	}
> +
>  	mutex_init(&data->update_lock);
>  	data->client = client;
>  
> @@ -296,7 +315,8 @@ static int powr1220_probe(struct i2c_client *client)
>  }
>  
>  static const struct i2c_device_id powr1220_ids[] = {
> -	{ "powr1220", 0, },
> +	{ "powr1014", powr1014, },
> +	{ "powr1220", powr1220, },
>  	{ }
>  };
>  



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux