Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 176423
b: refs/heads/master
c: c329795
h: refs/heads/master
i:
  176421: e25c59b
  176419: 0a6cf25
  176415: ddbbeab
v: v3
  • Loading branch information
Paul Fertser authored and Anton Vorontsov committed Nov 16, 2009
1 parent fedc44e commit 0a57892
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1282b35a1edf5f12ae58a2b16ae8615dfe0d9ecc
refs/heads/master: c329795052aa339850a45fab649ab97a36905136
50 changes: 29 additions & 21 deletions trunk/drivers/power/pcf50633-charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@
struct pcf50633_mbc {
struct pcf50633 *pcf;

int adapter_active;
int adapter_online;
int usb_active;
int usb_online;

struct power_supply usb;
Expand Down Expand Up @@ -88,7 +86,7 @@ int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma)
pcf50633_reg_write(mbc->pcf, PCF50633_REG_MBCC5, mbcc5);
}

mbcs2 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
mbcs2 = pcf50633_reg_read(mbc->pcf, PCF50633_REG_MBCS2);
chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK);

/* If chgmod == BATFULL, setting chgena has no effect.
Expand All @@ -105,8 +103,6 @@ int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma)
PCF50633_MBCC1_CHGENA, PCF50633_MBCC1_CHGENA);
}

mbc->usb_active = charging_start;

power_supply_changed(&mbc->usb);

return ret;
Expand All @@ -117,20 +113,44 @@ int pcf50633_mbc_get_status(struct pcf50633 *pcf)
{
struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev);
int status = 0;
u8 chgmod;

if (!mbc)
return 0;

chgmod = pcf50633_reg_read(mbc->pcf, PCF50633_REG_MBCS2)
& PCF50633_MBCS2_MBC_MASK;

if (mbc->usb_online)
status |= PCF50633_MBC_USB_ONLINE;
if (mbc->usb_active)
if (chgmod == PCF50633_MBCS2_MBC_USB_PRE ||
chgmod == PCF50633_MBCS2_MBC_USB_PRE_WAIT ||
chgmod == PCF50633_MBCS2_MBC_USB_FAST ||
chgmod == PCF50633_MBCS2_MBC_USB_FAST_WAIT)
status |= PCF50633_MBC_USB_ACTIVE;
if (mbc->adapter_online)
status |= PCF50633_MBC_ADAPTER_ONLINE;
if (mbc->adapter_active)
if (chgmod == PCF50633_MBCS2_MBC_ADP_PRE ||
chgmod == PCF50633_MBCS2_MBC_ADP_PRE_WAIT ||
chgmod == PCF50633_MBCS2_MBC_ADP_FAST ||
chgmod == PCF50633_MBCS2_MBC_ADP_FAST_WAIT)
status |= PCF50633_MBC_ADAPTER_ACTIVE;

return status;
}
EXPORT_SYMBOL_GPL(pcf50633_mbc_get_status);

int pcf50633_mbc_get_usb_online_status(struct pcf50633 *pcf)
{
struct pcf50633_mbc *mbc = platform_get_drvdata(pcf->mbc_pdev);

if (!mbc)
return 0;

return mbc->usb_online;
}
EXPORT_SYMBOL_GPL(pcf50633_mbc_get_usb_online_status);

static ssize_t
show_chgmode(struct device *dev, struct device_attribute *attr, char *buf)
{
Expand Down Expand Up @@ -248,26 +268,14 @@ pcf50633_mbc_irq_handler(int irq, void *data)
mbc->usb_online = 1;
} else if (irq == PCF50633_IRQ_USBREM) {
mbc->usb_online = 0;
mbc->usb_active = 0;
pcf50633_mbc_usb_curlim_set(mbc->pcf, 0);
}

/* Adapter */
if (irq == PCF50633_IRQ_ADPINS) {
if (irq == PCF50633_IRQ_ADPINS)
mbc->adapter_online = 1;
mbc->adapter_active = 1;
} else if (irq == PCF50633_IRQ_ADPREM) {
else if (irq == PCF50633_IRQ_ADPREM)
mbc->adapter_online = 0;
mbc->adapter_active = 0;
}

if (irq == PCF50633_IRQ_BATFULL) {
mbc->usb_active = 0;
mbc->adapter_active = 0;
} else if (irq == PCF50633_IRQ_USBLIMON)
mbc->usb_active = 0;
else if (irq == PCF50633_IRQ_USBLIMOFF)
mbc->usb_active = 1;

power_supply_changed(&mbc->ac);
power_supply_changed(&mbc->usb);
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/mfd/pcf50633/mbc.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ enum pcf50633_reg_mbcs3 {
int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);

int pcf50633_mbc_get_status(struct pcf50633 *);
int pcf50633_mbc_get_usb_online_status(struct pcf50633 *);

#endif

0 comments on commit 0a57892

Please sign in to comment.