drivers/power/supply/da9030_battery.c

Source file repositories/reference/linux-study-clean/drivers/power/supply/da9030_battery.c

File Facts

System
Linux kernel
Corpus path
drivers/power/supply/da9030_battery.c
Extension
.c
Size
15850 bytes
Lines
582
Domain
Driver Families
Bucket
drivers/power
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct da9030_adc_res {
	uint8_t vbat_res;
	uint8_t vbatmin_res;
	uint8_t vbatmintxon;
	uint8_t ichmax_res;
	uint8_t ichmin_res;
	uint8_t ichaverage_res;
	uint8_t vchmax_res;
	uint8_t vchmin_res;
	uint8_t tbat_res;
	uint8_t adc_in4_res;
	uint8_t adc_in5_res;
};

struct da9030_battery_thresholds {
	int tbat_low;
	int tbat_high;
	int tbat_restart;

	int vbat_low;
	int vbat_crit;
	int vbat_charge_start;
	int vbat_charge_stop;
	int vbat_charge_restart;

	int vcharge_min;
	int vcharge_max;
};

struct da9030_charger {
	struct power_supply *psy;
	struct power_supply_desc psy_desc;

	struct device *master;

	struct da9030_adc_res adc;
	struct delayed_work work;
	unsigned int interval;

	struct power_supply_info *battery_info;

	struct da9030_battery_thresholds thresholds;

	unsigned int charge_milliamp;
	unsigned int charge_millivolt;

	/* charger status */
	bool chdet;
	uint8_t fault;
	int mA;
	int mV;
	bool is_on;

	struct notifier_block nb;

	/* platform callbacks for battery low and critical events */
	void (*battery_low)(void);
	void (*battery_critical)(void);

	struct dentry *debug_file;
};

static inline int da9030_reg_to_mV(int reg)
{
	return ((reg * 2650) >> 8) + 2650;
}

static inline int da9030_millivolt_to_reg(int mV)
{
	return ((mV - 2650) << 8) / 2650;
}

static inline int da9030_reg_to_mA(int reg)
{
	return ((reg * 24000) >> 8) / 15;
}

#ifdef CONFIG_DEBUG_FS
static int bat_debug_show(struct seq_file *s, void *data)
{
	struct da9030_charger *charger = s->private;

	seq_printf(s, "charger is %s\n", str_on_off(charger->is_on));
	if (charger->chdet) {
		seq_printf(s, "iset = %dmA, vset = %dmV\n",
			   charger->mA, charger->mV);
	}

	seq_printf(s, "vbat_res = %d (%dmV)\n",
		   charger->adc.vbat_res,

Annotation

Implementation Notes