compal-laptop: Add charge control limit
Add charge control limit to the power supply subsystem of the Compal platform driver. This apparently was present in the original driver by Cezary Jackiewicz at http://eko.one.pl/index.php?page=compal-laptop but it seems to have been overlooked. The Kconfig description is updated to reflect this addition. It now also mentions the hwmon interface that was already present. Signed-off-by: Roald Frederickx <roald.frederickx@gmail.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
This commit is contained in:
Родитель
307340493f
Коммит
d9a427ec81
|
@ -309,8 +309,8 @@ config COMPAL_LAPTOP
|
|||
This is a driver for laptops built by Compal, and some models by
|
||||
other brands (e.g. Dell, Toshiba).
|
||||
|
||||
It adds support for rfkill, Bluetooth, WLAN and LCD brightness
|
||||
control.
|
||||
It adds support for rfkill, Bluetooth, WLAN, LCD brightness, hwmon
|
||||
and battery charging level control.
|
||||
|
||||
For a (possibly incomplete) list of supported laptops, please refer
|
||||
to: Documentation/platform/x86-laptop-drivers.txt
|
||||
|
|
|
@ -151,6 +151,8 @@
|
|||
#define BAT_STATUS2 0xF1
|
||||
#define BAT_STOP_CHARGE1 0xF2
|
||||
#define BAT_STOP_CHARGE2 0xF3
|
||||
#define BAT_CHARGE_LIMIT 0x03
|
||||
#define BAT_CHARGE_LIMIT_MAX 100
|
||||
|
||||
#define BAT_S0_DISCHARGE (1 << 0)
|
||||
#define BAT_S0_DISCHRG_CRITICAL (1 << 2)
|
||||
|
@ -601,6 +603,12 @@ static int bat_get_property(struct power_supply *psy,
|
|||
case POWER_SUPPLY_PROP_CHARGE_NOW:
|
||||
val->intval = ec_read_u16(BAT_CHARGE_NOW) * 1000;
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT:
|
||||
val->intval = ec_read_u8(BAT_CHARGE_LIMIT);
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX:
|
||||
val->intval = BAT_CHARGE_LIMIT_MAX;
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CAPACITY:
|
||||
val->intval = ec_read_u8(BAT_CAPACITY);
|
||||
break;
|
||||
|
@ -634,6 +642,36 @@ static int bat_get_property(struct power_supply *psy,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bat_set_property(struct power_supply *psy,
|
||||
enum power_supply_property psp,
|
||||
const union power_supply_propval *val)
|
||||
{
|
||||
int level;
|
||||
|
||||
switch (psp) {
|
||||
case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT:
|
||||
level = val->intval;
|
||||
if (level < 0 || level > BAT_CHARGE_LIMIT_MAX)
|
||||
return -EINVAL;
|
||||
if (ec_write(BAT_CHARGE_LIMIT, level) < 0)
|
||||
return -EIO;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bat_writeable_property(struct power_supply *psy,
|
||||
enum power_supply_property psp)
|
||||
{
|
||||
switch (psp) {
|
||||
case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -726,6 +764,8 @@ static enum power_supply_property compal_bat_properties[] = {
|
|||
POWER_SUPPLY_PROP_POWER_NOW,
|
||||
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
|
||||
POWER_SUPPLY_PROP_CHARGE_NOW,
|
||||
POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT,
|
||||
POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
|
||||
POWER_SUPPLY_PROP_CAPACITY,
|
||||
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
|
||||
POWER_SUPPLY_PROP_TEMP,
|
||||
|
@ -880,11 +920,12 @@ static const struct power_supply_desc psy_bat_desc = {
|
|||
.properties = compal_bat_properties,
|
||||
.num_properties = ARRAY_SIZE(compal_bat_properties),
|
||||
.get_property = bat_get_property,
|
||||
.set_property = bat_set_property,
|
||||
.property_is_writeable = bat_writeable_property,
|
||||
};
|
||||
|
||||
static void initialize_power_supply_data(struct compal_data *data)
|
||||
{
|
||||
|
||||
ec_read_sequence(BAT_MANUFACTURER_NAME_ADDR,
|
||||
data->bat_manufacturer_name,
|
||||
BAT_MANUFACTURER_NAME_LEN);
|
||||
|
|
Загрузка…
Ссылка в новой задаче