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;
}