Skip to content

Commit 5a7a912

Browse files
marcanjannau
authored andcommitted
power: supply: macsmc_power: Add AC power supply
Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent ab63aef commit 5a7a912

1 file changed

Lines changed: 65 additions & 7 deletions

File tree

drivers/power/supply/macsmc_power.c

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@
1717
struct macsmc_power {
1818
struct device *dev;
1919
struct apple_smc *smc;
20-
struct power_supply *psy;
20+
21+
struct power_supply *batt;
2122
char model_name[MAX_STRING_LENGTH];
2223
char serial_number[MAX_STRING_LENGTH];
2324
char mfg_date[MAX_STRING_LENGTH];
2425

26+
struct power_supply *ac;
27+
2528
struct notifier_block nb;
2629
};
2730

@@ -333,7 +336,6 @@ static int macsmc_battery_property_is_writeable(struct power_supply *psy,
333336
}
334337
}
335338

336-
337339
static enum power_supply_property macsmc_battery_props[] = {
338340
POWER_SUPPLY_PROP_STATUS,
339341
POWER_SUPPLY_PROP_PRESENT,
@@ -374,6 +376,54 @@ static const struct power_supply_desc macsmc_battery_desc = {
374376
.num_properties = ARRAY_SIZE(macsmc_battery_props),
375377
};
376378

379+
static int macsmc_ac_get_property(struct power_supply *psy,
380+
enum power_supply_property psp,
381+
union power_supply_propval *val)
382+
{
383+
struct macsmc_power *power = power_supply_get_drvdata(psy);
384+
int ret = 0;
385+
u16 vu16;
386+
u32 vu32;
387+
388+
switch (psp) {
389+
case POWER_SUPPLY_PROP_ONLINE:
390+
ret = apple_smc_read_u32(power->smc, SMC_KEY(CHIS), &vu32);
391+
val->intval = !!vu32;
392+
break;
393+
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
394+
ret = apple_smc_read_u16(power->smc, SMC_KEY(AC-n), &vu16);
395+
val->intval = vu16 * 1000;
396+
break;
397+
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
398+
ret = apple_smc_read_u16(power->smc, SMC_KEY(AC-i), &vu16);
399+
val->intval = vu16 * 1000;
400+
break;
401+
case POWER_SUPPLY_PROP_INPUT_POWER_LIMIT:
402+
ret = apple_smc_read_u32(power->smc, SMC_KEY(ACPW), &vu32);
403+
val->intval = vu32 * 1000;
404+
break;
405+
default:
406+
return -EINVAL;
407+
}
408+
409+
return ret;
410+
}
411+
412+
static enum power_supply_property macsmc_ac_props[] = {
413+
POWER_SUPPLY_PROP_ONLINE,
414+
POWER_SUPPLY_PROP_VOLTAGE_NOW,
415+
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
416+
POWER_SUPPLY_PROP_INPUT_POWER_LIMIT,
417+
};
418+
419+
static const struct power_supply_desc macsmc_ac_desc = {
420+
.name = "macsmc-ac",
421+
.type = POWER_SUPPLY_TYPE_MAINS,
422+
.get_property = macsmc_ac_get_property,
423+
.properties = macsmc_ac_props,
424+
.num_properties = ARRAY_SIZE(macsmc_ac_props),
425+
};
426+
377427
static int macsmc_power_event(struct notifier_block *nb, unsigned long event, void *data)
378428
{
379429
struct macsmc_power *power = container_of(nb, struct macsmc_power, nb);
@@ -382,7 +432,8 @@ static int macsmc_power_event(struct notifier_block *nb, unsigned long event, vo
382432
bool charging = (event & 0xff) != 0;
383433

384434
dev_info(power->dev, "Charging: %d\n", charging);
385-
power_supply_changed(power->psy);
435+
power_supply_changed(power->batt);
436+
power_supply_changed(power->ac);
386437

387438
return NOTIFY_OK;
388439
}
@@ -419,10 +470,17 @@ static int macsmc_power_probe(struct platform_device *pdev)
419470
apple_smc_write_u8(power->smc, SMC_KEY(CH0B), 0);
420471

421472
psy_cfg.drv_data = power;
422-
power->psy = devm_power_supply_register(&pdev->dev, &macsmc_battery_desc, &psy_cfg);
423-
if (IS_ERR(power->psy)) {
424-
dev_err(&pdev->dev, "Failed to register power supply\n");
425-
ret = PTR_ERR(power->psy);
473+
power->batt = devm_power_supply_register(&pdev->dev, &macsmc_battery_desc, &psy_cfg);
474+
if (IS_ERR(power->batt)) {
475+
dev_err(&pdev->dev, "Failed to register battery\n");
476+
ret = PTR_ERR(power->batt);
477+
return ret;
478+
}
479+
480+
power->ac = devm_power_supply_register(&pdev->dev, &macsmc_ac_desc, &psy_cfg);
481+
if (IS_ERR(power->ac)) {
482+
dev_err(&pdev->dev, "Failed to register AC adapter\n");
483+
ret = PTR_ERR(power->ac);
426484
return ret;
427485
}
428486

0 commit comments

Comments
 (0)