Commit 853eee72 authored by Clifton Barnes's avatar Clifton Barnes Committed by Linus Torvalds

drivers/power/ds2780_battery.c: create central point for calling w1 interface

Simply creates one point to call the w1 interface.
Signed-off-by: default avatarClifton Barnes <cabarnes@indesign-llc.com>
Cc: Evgeniy Polyakov <zbr@ioremap.net>
Cc: <stable@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3e542817
...@@ -49,8 +49,8 @@ enum current_types { ...@@ -49,8 +49,8 @@ enum current_types {
static const char model[] = "DS2780"; static const char model[] = "DS2780";
static const char manufacturer[] = "Maxim/Dallas"; static const char manufacturer[] = "Maxim/Dallas";
static inline struct ds2780_device_info *to_ds2780_device_info( static inline struct ds2780_device_info *
struct power_supply *psy) to_ds2780_device_info(struct power_supply *psy)
{ {
return container_of(psy, struct ds2780_device_info, bat); return container_of(psy, struct ds2780_device_info, bat);
} }
...@@ -60,17 +60,25 @@ static inline struct power_supply *to_power_supply(struct device *dev) ...@@ -60,17 +60,25 @@ static inline struct power_supply *to_power_supply(struct device *dev)
return dev_get_drvdata(dev); return dev_get_drvdata(dev);
} }
static inline int ds2780_read8(struct device *dev, u8 *val, int addr) static inline int ds2780_battery_io(struct ds2780_device_info *dev_info,
char *buf, int addr, size_t count, int io)
{ {
return w1_ds2780_io(dev, val, addr, sizeof(u8), 0); return w1_ds2780_io(dev_info->w1_dev, buf, addr, count, io);
} }
static int ds2780_read16(struct device *dev, s16 *val, int addr) static inline int ds2780_read8(struct ds2780_device_info *dev_info, u8 *val,
int addr)
{
return ds2780_battery_io(dev_info, val, addr, sizeof(u8), 0);
}
static int ds2780_read16(struct ds2780_device_info *dev_info, s16 *val,
int addr)
{ {
int ret; int ret;
u8 raw[2]; u8 raw[2];
ret = w1_ds2780_io(dev, raw, addr, sizeof(u8) * 2, 0); ret = ds2780_battery_io(dev_info, raw, addr, sizeof(raw), 0);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -79,16 +87,16 @@ static int ds2780_read16(struct device *dev, s16 *val, int addr) ...@@ -79,16 +87,16 @@ static int ds2780_read16(struct device *dev, s16 *val, int addr)
return 0; return 0;
} }
static inline int ds2780_read_block(struct device *dev, u8 *val, int addr, static inline int ds2780_read_block(struct ds2780_device_info *dev_info,
size_t count) u8 *val, int addr, size_t count)
{ {
return w1_ds2780_io(dev, val, addr, count, 0); return ds2780_battery_io(dev_info, val, addr, count, 0);
} }
static inline int ds2780_write(struct device *dev, u8 *val, int addr, static inline int ds2780_write(struct ds2780_device_info *dev_info, u8 *val,
size_t count) int addr, size_t count)
{ {
return w1_ds2780_io(dev, val, addr, count, 1); return ds2780_battery_io(dev_info, val, addr, count, 1);
} }
static inline int ds2780_store_eeprom(struct device *dev, int addr) static inline int ds2780_store_eeprom(struct device *dev, int addr)
...@@ -122,7 +130,7 @@ static int ds2780_set_sense_register(struct ds2780_device_info *dev_info, ...@@ -122,7 +130,7 @@ static int ds2780_set_sense_register(struct ds2780_device_info *dev_info,
{ {
int ret; int ret;
ret = ds2780_write(dev_info->w1_dev, &conductance, ret = ds2780_write(dev_info, &conductance,
DS2780_RSNSP_REG, sizeof(u8)); DS2780_RSNSP_REG, sizeof(u8));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -134,7 +142,7 @@ static int ds2780_set_sense_register(struct ds2780_device_info *dev_info, ...@@ -134,7 +142,7 @@ static int ds2780_set_sense_register(struct ds2780_device_info *dev_info,
static int ds2780_get_rsgain_register(struct ds2780_device_info *dev_info, static int ds2780_get_rsgain_register(struct ds2780_device_info *dev_info,
u16 *rsgain) u16 *rsgain)
{ {
return ds2780_read16(dev_info->w1_dev, rsgain, DS2780_RSGAIN_MSB_REG); return ds2780_read16(dev_info, rsgain, DS2780_RSGAIN_MSB_REG);
} }
/* Set RSGAIN value from 0 to 1.999 in steps of 0.001 */ /* Set RSGAIN value from 0 to 1.999 in steps of 0.001 */
...@@ -144,8 +152,8 @@ static int ds2780_set_rsgain_register(struct ds2780_device_info *dev_info, ...@@ -144,8 +152,8 @@ static int ds2780_set_rsgain_register(struct ds2780_device_info *dev_info,
int ret; int ret;
u8 raw[] = {rsgain >> 8, rsgain & 0xFF}; u8 raw[] = {rsgain >> 8, rsgain & 0xFF};
ret = ds2780_write(dev_info->w1_dev, raw, ret = ds2780_write(dev_info, raw,
DS2780_RSGAIN_MSB_REG, sizeof(u8) * 2); DS2780_RSGAIN_MSB_REG, sizeof(raw));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -167,7 +175,7 @@ static int ds2780_get_voltage(struct ds2780_device_info *dev_info, ...@@ -167,7 +175,7 @@ static int ds2780_get_voltage(struct ds2780_device_info *dev_info,
* Bits 2 - 0 of the voltage value are in bits 7 - 5 of the * Bits 2 - 0 of the voltage value are in bits 7 - 5 of the
* voltage LSB register * voltage LSB register
*/ */
ret = ds2780_read16(dev_info->w1_dev, &voltage_raw, ret = ds2780_read16(dev_info, &voltage_raw,
DS2780_VOLT_MSB_REG); DS2780_VOLT_MSB_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -196,7 +204,7 @@ static int ds2780_get_temperature(struct ds2780_device_info *dev_info, ...@@ -196,7 +204,7 @@ static int ds2780_get_temperature(struct ds2780_device_info *dev_info,
* Bits 2 - 0 of the temperature value are in bits 7 - 5 of the * Bits 2 - 0 of the temperature value are in bits 7 - 5 of the
* temperature LSB register * temperature LSB register
*/ */
ret = ds2780_read16(dev_info->w1_dev, &temperature_raw, ret = ds2780_read16(dev_info, &temperature_raw,
DS2780_TEMP_MSB_REG); DS2780_TEMP_MSB_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -222,13 +230,13 @@ static int ds2780_get_current(struct ds2780_device_info *dev_info, ...@@ -222,13 +230,13 @@ static int ds2780_get_current(struct ds2780_device_info *dev_info,
* The units of measurement for current are dependent on the value of * The units of measurement for current are dependent on the value of
* the sense resistor. * the sense resistor.
*/ */
ret = ds2780_read8(dev_info->w1_dev, &sense_res_raw, DS2780_RSNSP_REG); ret = ds2780_read8(dev_info, &sense_res_raw, DS2780_RSNSP_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
if (sense_res_raw == 0) { if (sense_res_raw == 0) {
dev_err(dev_info->dev, "sense resistor value is 0\n"); dev_err(dev_info->dev, "sense resistor value is 0\n");
return -ENXIO; return -EINVAL;
} }
sense_res = 1000 / sense_res_raw; sense_res = 1000 / sense_res_raw;
...@@ -248,7 +256,7 @@ static int ds2780_get_current(struct ds2780_device_info *dev_info, ...@@ -248,7 +256,7 @@ static int ds2780_get_current(struct ds2780_device_info *dev_info,
* Bits 7 - 0 of the current value are in bits 7 - 0 of the current * Bits 7 - 0 of the current value are in bits 7 - 0 of the current
* LSB register * LSB register
*/ */
ret = ds2780_read16(dev_info->w1_dev, &current_raw, reg_msb); ret = ds2780_read16(dev_info, &current_raw, reg_msb);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -267,7 +275,7 @@ static int ds2780_get_accumulated_current(struct ds2780_device_info *dev_info, ...@@ -267,7 +275,7 @@ static int ds2780_get_accumulated_current(struct ds2780_device_info *dev_info,
* The units of measurement for accumulated current are dependent on * The units of measurement for accumulated current are dependent on
* the value of the sense resistor. * the value of the sense resistor.
*/ */
ret = ds2780_read8(dev_info->w1_dev, &sense_res_raw, DS2780_RSNSP_REG); ret = ds2780_read8(dev_info, &sense_res_raw, DS2780_RSNSP_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -285,7 +293,7 @@ static int ds2780_get_accumulated_current(struct ds2780_device_info *dev_info, ...@@ -285,7 +293,7 @@ static int ds2780_get_accumulated_current(struct ds2780_device_info *dev_info,
* Bits 7 - 0 of the ACR value are in bits 7 - 0 of the ACR * Bits 7 - 0 of the ACR value are in bits 7 - 0 of the ACR
* LSB register * LSB register
*/ */
ret = ds2780_read16(dev_info->w1_dev, &current_raw, DS2780_ACR_MSB_REG); ret = ds2780_read16(dev_info, &current_raw, DS2780_ACR_MSB_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -299,7 +307,7 @@ static int ds2780_get_capacity(struct ds2780_device_info *dev_info, ...@@ -299,7 +307,7 @@ static int ds2780_get_capacity(struct ds2780_device_info *dev_info,
int ret; int ret;
u8 raw; u8 raw;
ret = ds2780_read8(dev_info->w1_dev, &raw, DS2780_RARC_REG); ret = ds2780_read8(dev_info, &raw, DS2780_RARC_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -345,7 +353,7 @@ static int ds2780_get_charge_now(struct ds2780_device_info *dev_info, ...@@ -345,7 +353,7 @@ static int ds2780_get_charge_now(struct ds2780_device_info *dev_info,
* Bits 7 - 0 of the RAAC value are in bits 7 - 0 of the RAAC * Bits 7 - 0 of the RAAC value are in bits 7 - 0 of the RAAC
* LSB register * LSB register
*/ */
ret = ds2780_read16(dev_info->w1_dev, &charge_raw, DS2780_RAAC_MSB_REG); ret = ds2780_read16(dev_info, &charge_raw, DS2780_RAAC_MSB_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -356,7 +364,7 @@ static int ds2780_get_charge_now(struct ds2780_device_info *dev_info, ...@@ -356,7 +364,7 @@ static int ds2780_get_charge_now(struct ds2780_device_info *dev_info,
static int ds2780_get_control_register(struct ds2780_device_info *dev_info, static int ds2780_get_control_register(struct ds2780_device_info *dev_info,
u8 *control_reg) u8 *control_reg)
{ {
return ds2780_read8(dev_info->w1_dev, control_reg, DS2780_CONTROL_REG); return ds2780_read8(dev_info, control_reg, DS2780_CONTROL_REG);
} }
static int ds2780_set_control_register(struct ds2780_device_info *dev_info, static int ds2780_set_control_register(struct ds2780_device_info *dev_info,
...@@ -364,7 +372,7 @@ static int ds2780_set_control_register(struct ds2780_device_info *dev_info, ...@@ -364,7 +372,7 @@ static int ds2780_set_control_register(struct ds2780_device_info *dev_info,
{ {
int ret; int ret;
ret = ds2780_write(dev_info->w1_dev, &control_reg, ret = ds2780_write(dev_info, &control_reg,
DS2780_CONTROL_REG, sizeof(u8)); DS2780_CONTROL_REG, sizeof(u8));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -503,7 +511,7 @@ static ssize_t ds2780_get_sense_resistor_value(struct device *dev, ...@@ -503,7 +511,7 @@ static ssize_t ds2780_get_sense_resistor_value(struct device *dev,
struct power_supply *psy = to_power_supply(dev); struct power_supply *psy = to_power_supply(dev);
struct ds2780_device_info *dev_info = to_ds2780_device_info(psy); struct ds2780_device_info *dev_info = to_ds2780_device_info(psy);
ret = ds2780_read8(dev_info->w1_dev, &sense_resistor, DS2780_RSNSP_REG); ret = ds2780_read8(dev_info, &sense_resistor, DS2780_RSNSP_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -584,7 +592,7 @@ static ssize_t ds2780_get_pio_pin(struct device *dev, ...@@ -584,7 +592,7 @@ static ssize_t ds2780_get_pio_pin(struct device *dev,
struct power_supply *psy = to_power_supply(dev); struct power_supply *psy = to_power_supply(dev);
struct ds2780_device_info *dev_info = to_ds2780_device_info(psy); struct ds2780_device_info *dev_info = to_ds2780_device_info(psy);
ret = ds2780_read8(dev_info->w1_dev, &sfr, DS2780_SFR_REG); ret = ds2780_read8(dev_info, &sfr, DS2780_SFR_REG);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -611,7 +619,7 @@ static ssize_t ds2780_set_pio_pin(struct device *dev, ...@@ -611,7 +619,7 @@ static ssize_t ds2780_set_pio_pin(struct device *dev,
return -EINVAL; return -EINVAL;
} }
ret = ds2780_write(dev_info->w1_dev, &new_setting, ret = ds2780_write(dev_info, &new_setting,
DS2780_SFR_REG, sizeof(u8)); DS2780_SFR_REG, sizeof(u8));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -632,7 +640,7 @@ static ssize_t ds2780_read_param_eeprom_bin(struct file *filp, ...@@ -632,7 +640,7 @@ static ssize_t ds2780_read_param_eeprom_bin(struct file *filp,
DS2780_EEPROM_BLOCK1_END - DS2780_EEPROM_BLOCK1_END -
DS2780_EEPROM_BLOCK1_START + 1 - off); DS2780_EEPROM_BLOCK1_START + 1 - off);
return ds2780_read_block(dev_info->w1_dev, buf, return ds2780_read_block(dev_info, buf,
DS2780_EEPROM_BLOCK1_START + off, count); DS2780_EEPROM_BLOCK1_START + off, count);
} }
...@@ -650,7 +658,7 @@ static ssize_t ds2780_write_param_eeprom_bin(struct file *filp, ...@@ -650,7 +658,7 @@ static ssize_t ds2780_write_param_eeprom_bin(struct file *filp,
DS2780_EEPROM_BLOCK1_END - DS2780_EEPROM_BLOCK1_END -
DS2780_EEPROM_BLOCK1_START + 1 - off); DS2780_EEPROM_BLOCK1_START + 1 - off);
ret = ds2780_write(dev_info->w1_dev, buf, ret = ds2780_write(dev_info, buf,
DS2780_EEPROM_BLOCK1_START + off, count); DS2780_EEPROM_BLOCK1_START + off, count);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -685,9 +693,8 @@ static ssize_t ds2780_read_user_eeprom_bin(struct file *filp, ...@@ -685,9 +693,8 @@ static ssize_t ds2780_read_user_eeprom_bin(struct file *filp,
DS2780_EEPROM_BLOCK0_END - DS2780_EEPROM_BLOCK0_END -
DS2780_EEPROM_BLOCK0_START + 1 - off); DS2780_EEPROM_BLOCK0_START + 1 - off);
return ds2780_read_block(dev_info->w1_dev, buf, return ds2780_read_block(dev_info, buf,
DS2780_EEPROM_BLOCK0_START + off, count); DS2780_EEPROM_BLOCK0_START + off, count);
} }
static ssize_t ds2780_write_user_eeprom_bin(struct file *filp, static ssize_t ds2780_write_user_eeprom_bin(struct file *filp,
...@@ -704,7 +711,7 @@ static ssize_t ds2780_write_user_eeprom_bin(struct file *filp, ...@@ -704,7 +711,7 @@ static ssize_t ds2780_write_user_eeprom_bin(struct file *filp,
DS2780_EEPROM_BLOCK0_END - DS2780_EEPROM_BLOCK0_END -
DS2780_EEPROM_BLOCK0_START + 1 - off); DS2780_EEPROM_BLOCK0_START + 1 - off);
ret = ds2780_write(dev_info->w1_dev, buf, ret = ds2780_write(dev_info, buf,
DS2780_EEPROM_BLOCK0_START + off, count); DS2780_EEPROM_BLOCK0_START + off, count);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment