static void bq2416x_usb_charger_work(struct work_struct *work) { struct bq2416x_device_info *di = container_of(work, struct bq2416x_device_info, usb_work); switch (di->event) { case USB_EVENT_CHARGER: bq2416x_start_ac_charger(di); break; case USB_EVENT_VBUS: bq2416x_start_usb_charger(di); break; case USB_EVENT_NONE: bq2416x_stop_charger(di); break; case USB_EVENT_ENUMERATED: break; default: return; } }
static ssize_t bq2416x_set_charging(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int status = count; struct bq2416x_device_info *di = dev_get_drvdata(dev); if (strncmp(buf, "startac", 7) == 0) { if (di->charger_source == POWER_SUPPLY_TYPE_USB) bq2416x_stop_charger(di); bq2416x_start_ac_charger(di); } else if (strncmp(buf, "startusb", 8) == 0) { if (di->charger_source == POWER_SUPPLY_TYPE_MAINS) bq2416x_stop_charger(di); bq2416x_start_usb_charger(di); } else if (strncmp(buf, "stop" , 4) == 0) { bq2416x_stop_charger(di); }else return -EINVAL; return status; }