Skip to content

Commit 7721c2f

Browse files
committed
power: supply: sbs-battery: add MANUFACTURE_DATE support
Expose the battery's manufacture date to userspace. Reviewed-by: Emil Velikov <[email protected]> Signed-off-by: Sebastian Reichel <[email protected]>
1 parent 787fdbc commit 7721c2f

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

drivers/power/supply/sbs-battery.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ enum {
5858
#define SBS_VERSION_1_1 2
5959
#define SBS_VERSION_1_1_WITH_PEC 3
6060

61+
#define REG_ADDR_MANUFACTURE_DATE 0x1B
62+
6163
/* Battery Mode defines */
6264
#define BATTERY_MODE_OFFSET 0x03
6365
#define BATTERY_MODE_CAPACITY_MASK BIT(15)
@@ -171,6 +173,9 @@ static enum power_supply_property sbs_properties[] = {
171173
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
172174
POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
173175
POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
176+
POWER_SUPPLY_PROP_MANUFACTURE_YEAR,
177+
POWER_SUPPLY_PROP_MANUFACTURE_MONTH,
178+
POWER_SUPPLY_PROP_MANUFACTURE_DAY,
174179
/* Properties of type `const char *' */
175180
POWER_SUPPLY_PROP_MANUFACTURER,
176181
POWER_SUPPLY_PROP_MODEL_NAME
@@ -682,6 +687,38 @@ static int sbs_get_chemistry(struct i2c_client *client,
682687
return 0;
683688
}
684689

690+
static int sbs_get_battery_manufacture_date(struct i2c_client *client,
691+
enum power_supply_property psp,
692+
union power_supply_propval *val)
693+
{
694+
int ret;
695+
u16 day, month, year;
696+
697+
ret = sbs_read_word_data(client, REG_ADDR_MANUFACTURE_DATE);
698+
if (ret < 0)
699+
return ret;
700+
701+
day = ret & GENMASK(4, 0);
702+
month = (ret & GENMASK(8, 5)) >> 5;
703+
year = ((ret & GENMASK(15, 9)) >> 9) + 1980;
704+
705+
switch (psp) {
706+
case POWER_SUPPLY_PROP_MANUFACTURE_YEAR:
707+
val->intval = year;
708+
break;
709+
case POWER_SUPPLY_PROP_MANUFACTURE_MONTH:
710+
val->intval = month;
711+
break;
712+
case POWER_SUPPLY_PROP_MANUFACTURE_DAY:
713+
val->intval = day;
714+
break;
715+
default:
716+
return -EINVAL;
717+
}
718+
719+
return 0;
720+
}
721+
685722
static int sbs_get_property(struct power_supply *psy,
686723
enum power_supply_property psp,
687724
union power_supply_propval *val)
@@ -790,6 +827,12 @@ static int sbs_get_property(struct power_supply *psy,
790827
val->strval = manufacturer;
791828
break;
792829

830+
case POWER_SUPPLY_PROP_MANUFACTURE_YEAR:
831+
case POWER_SUPPLY_PROP_MANUFACTURE_MONTH:
832+
case POWER_SUPPLY_PROP_MANUFACTURE_DAY:
833+
ret = sbs_get_battery_manufacture_date(client, psp, val);
834+
break;
835+
793836
default:
794837
dev_err(&client->dev,
795838
"%s: INVALID property\n", __func__);

0 commit comments

Comments
 (0)