Android PowerSupply (一)总概

目录

Android PowerSupply (一)总概

Android PowerSupply (二)power_supply_core

Android PowerSupply (三)power_supply_sys

Android PowerSupply (四)ChargeIC SGM41511 IC driver调试

Android PowerSupply (五)ChargeIC SGM41511 IC简介

Android Healthd BartteryMonitor

 

PowerSupply类

在实际设备的供电系统中存在可能存在多种电源,比如 DC供电,USB供电,battery供电等等, 这些不同的供电设备间存在共性又存在不同,还可能存在级联的关系;

power supply 是在linux中根据供电设备的共性抽象出来的一个类,用来描述它的统一框架;

power supply core 为驱动driver 提供统一的,公共逻辑的的封装,用来实现相关的驱动driver

为用户空间提供统一的uevent上报方式,同步其访问方式,下面是对power supply这一类别的简介;

 

通过内核提供的头文件,可知其基本信息 ;路径:kernel/include/linux/power_supply.h

描述power supply的核心结构体

struct power_supply {
	const struct power_supply_desc *desc;

	char **supplied_to;   //!< 表示级联下级的psy By: jixuan 2021年6月15日
	size_t num_supplicants; //!< 属性的个数 By: jixuan 2021年6月15日

	char **supplied_from; //!< 表示级联上级的psy By: jixuan 2021年6月15日
	size_t num_supplies;
	struct device_node *of_node;
	/* Driver private data */
	void *drv_data;  //!< 私有参数,用于保存传递实际的设备数据结构 By: jixuan 2021年6月15日

	/* private */
	struct device dev;
	struct work_struct changed_work;
	struct delayed_work deferred_register_work;
	spinlock_t changed_lock;
	bool changed;
	bool initialized;
	atomic_t use_cnt;

#ifdef CONFIG_LEDS_TRIGGERS   //!< 控制充电指示灯相关 By: jixuan 2021年6月15日
	struct led_trigger *charging_full_trig;
	char *charging_full_trig_name;
	struct led_trigger *charging_trig;
	char *charging_trig_name;
........
#endif
};
struct power_supply_desc {
	const char *name;       //!< power_supply的名字 By: jixuan 2021年6月15日
	enum power_supply_type type;   //!< 类型 By: jixuan 2021年6月15日
	enum power_supply_property *properties;  //!< 属性 By: jixuan 2021年6月15日
	size_t num_properties;

	int (*get_property)(struct power_supply *psy,
			    enum power_supply_property psp,
			    union power_supply_propval *val);
	int (*set_property)(struct power_supply *psy,
			    enum power_supply_property psp,
			    const union power_supply_propval *val);
	 //!< get_property set_property 更新获取属性的重要回调 By: jixuan 2021年6月15日
	int (*property_is_writeable)(struct power_supply *psy,
				     enum power_supply_property psp);
	void (*external_power_changed)(struct power_supply *psy);
	void (*set_charged)(struct power_supply *psy);
	bool no_thermal;
	/* For APM emulation, think legacy userspace. */
	int use_for_apm;
};

描述power supply type的枚举

enum power_supply_type {
	POWER_SUPPLY_TYPE_UNKNOWN = 0,
	POWER_SUPPLY_TYPE_BATTERY,
	POWER_SUPPLY_TYPE_UPS,      //!< 备用电池 By: jixuan 2021年6月15日
	POWER_SUPPLY_TYPE_MAINS,    
	POWER_SUPPLY_TYPE_USB,		/* Standard Downstream Port */
	POWER_SUPPLY_TYPE_USB_DCP,	/* Dedicated Charging Port */
	POWER_SUPPLY_TYPE_USB_CDP,	/* Charging Downstream Port */
	POWER_SUPPLY_TYPE_USB_ACA,	/* Accessory Charger Adapters */
	POWER_SUPPLY_TYPE_USB_HVDCP,	/* High Voltage DCP */
	POWER_SUPPLY_TYPE_USB_HVDCP_3,	/* Efficient High Voltage DCP */
	POWER_SUPPLY_TYPE_USB_PD,       /* Power Delivery */
	POWER_SUPPLY_TYPE_WIRELESS,	/* Accessory Charger Adapters */
	POWER_SUPPLY_TYPE_USB_FLOAT,	/* Floating charger */
	POWER_SUPPLY_TYPE_BMS,		/* Battery Monitor System */
	POWER_SUPPLY_TYPE_PARALLEL,	/* Parallel Path */
	POWER_SUPPLY_TYPE_MAIN,		/* Main Path */
	POWER_SUPPLY_TYPE_WIPOWER,	/* Wipower */
	POWER_SUPPLY_TYPE_TYPEC,	/* Type-C */
	POWER_SUPPLY_TYPE_UFP,		/* Type-C UFP */
	POWER_SUPPLY_TYPE_DFP,		/* TYpe-C DFP */
}

描述power supply 属性的枚举

// 有很多支持的属性,这里仅列出部分,需注意,枚举的顺序不能修改,它是后面和sysfs中对应的关键
enum power_supply_property {
	/* Properties of type `int' */
	POWER_SUPPLY_PROP_STATUS = 0,
	POWER_SUPPLY_PROP_CHARGE_TYPE,
	POWER_SUPPLY_PROP_HEALTH,
	POWER_SUPPLY_PROP_PRESENT,
	POWER_SUPPLY_PROP_ONLINE,
	POWER_SUPPLY_PROP_AUTHENTIC,
	POWER_SUPPLY_PROP_TECHNOLOGY,
	POWER_SUPPLY_PROP_CYCLE_COUNT,
	POWER_SUPPLY_PROP_VOLTAGE_MAX,
	POWER_SUPPLY_PROP_VOLTAGE_MIN,
	POWER_SUPPLY_PROP_VOLTAGE_BOOT,
	POWER_SUPPLY_PROP_CURRENT_MAX,
	POWER_SUPPLY_PROP_CURRENT_NOW,
	POWER_SUPPLY_PROP_CURRENT_AVG,
	POWER_SUPPLY_PROP_CURRENT_BOOT,
	POWER_SUPPLY_PROP_POWER_NOW,
	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
	POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
	POWER_SUPPLY_PROP_TEMP,
	POWER_SUPPLY_PROP_TEMP_MAX,
	POWER_SUPPLY_PROP_TEMP_MIN,
	POWER_SUPPLY_PROP_TEMP_ALERT_MIN,
	POWER_SUPPLY_PROP_TEMP_ALERT_MAX,
	POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */
	POWER_SUPPLY_PROP_SCOPE,
	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
	POWER_SUPPLY_PROP_CALIBRATE,
	/* Local extensions */
	POWER_SUPPLY_PROP_USB_HC,
	POWER_SUPPLY_PROP_USB_OTG,
	POWER_SUPPLY_PROP_BATTERY_CHARGING_ENABLED,
	POWER_SUPPLY_PROP_WARM_TEMP,
	POWER_SUPPLY_PROP_COLD_TEMP,
	POWER_SUPPLY_PROP_HOT_TEMP,

};

描述power supply 属性状态的枚举

enum {
	POWER_SUPPLY_STATUS_UNKNOWN = 0,
	POWER_SUPPLY_STATUS_CHARGING,
	POWER_SUPPLY_STATUS_DISCHARGING,
	POWER_SUPPLY_STATUS_NOT_CHARGING,
	POWER_SUPPLY_STATUS_FULL,
};
 //!< 描述充电状态的枚举 By: jixuan 2021年6月15日
enum {
	POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,
	POWER_SUPPLY_CHARGE_TYPE_NONE,
	POWER_SUPPLY_CHARGE_TYPE_TRICKLE,
	POWER_SUPPLY_CHARGE_TYPE_FAST,
	POWER_SUPPLY_CHARGE_TYPE_TAPER,
};
 //!< 描述充电mode的枚举 By: jixuan 2021年6月15日
enum {
	POWER_SUPPLY_HEALTH_UNKNOWN = 0,
	POWER_SUPPLY_HEALTH_GOOD,
	POWER_SUPPLY_HEALTH_OVERHEAT,
	POWER_SUPPLY_HEALTH_DEAD,
	POWER_SUPPLY_HEALTH_OVERVOLTAGE,
	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE,
	POWER_SUPPLY_HEALTH_COLD,
	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE,
	POWER_SUPPLY_HEALTH_WARM,
	POWER_SUPPLY_HEALTH_COOL,
	POWER_SUPPLY_HEALTH_HOT,
};
 //!< 描述Health状态的枚举 By: jixuan 2021年6月15日

 

posted @ 2021-06-10 10:23  mail181  阅读(253)  评论(0编辑  收藏  举报