drivers/regulator/mt6359-regulator.c

Source file repositories/reference/linux-study-clean/drivers/regulator/mt6359-regulator.c

File Facts

System
Linux kernel
Corpus path
drivers/regulator/mt6359-regulator.c
Extension
.c
Size
43033 bytes
Lines
1153
Domain
Driver Families
Bucket
drivers/regulator
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 mt6359_regulator_info {
	struct regulator_desc desc;
	u32 status_reg;
	u32 qi;
	u32 modeset_reg;
	u32 modeset_mask;
	u32 lp_mode_reg;
	u32 lp_mode_mask;
};

#define MT6359_BUCK(match, _name, supply, min, max, step,	\
	_enable_reg, _status_reg,				\
	_vsel_reg, _vsel_mask,					\
	_lp_mode_reg, _lp_mode_shift,				\
	_modeset_reg, _modeset_shift)				\
[MT6359_ID_##_name] = {						\
	.desc = {						\
		.name = #_name,					\
		.supply_name = supply,				\
		.of_match = of_match_ptr(match),		\
		.regulators_node = of_match_ptr("regulators"),	\
		.ops = &mt6359_volt_linear_ops,			\
		.type = REGULATOR_VOLTAGE,			\
		.id = MT6359_ID_##_name,			\
		.owner = THIS_MODULE,				\
		.uV_step = (step),				\
		.n_voltages = ((max) - (min)) / (step) + 1,	\
		.min_uV = (min),				\
		.vsel_reg = _vsel_reg,				\
		.vsel_mask = _vsel_mask,			\
		.enable_reg = _enable_reg,			\
		.enable_mask = BIT(0),				\
		.of_map_mode = mt6359_map_mode,			\
	},							\
	.status_reg = _status_reg,				\
	.qi = BIT(0),						\
	.lp_mode_reg = _lp_mode_reg,				\
	.lp_mode_mask = BIT(_lp_mode_shift),			\
	.modeset_reg = _modeset_reg,				\
	.modeset_mask = BIT(_modeset_shift),			\
}

#define MT6359_LDO_LINEAR(match, _name, supply, min, max, step,	\
	_enable_reg, _status_reg, _vsel_reg, _vsel_mask)	\
[MT6359_ID_##_name] = {						\
	.desc = {						\
		.name = #_name,					\
		.supply_name = supply,				\
		.of_match = of_match_ptr(match),		\
		.regulators_node = of_match_ptr("regulators"),	\
		.ops = &mt6359_volt_linear_ops,			\
		.type = REGULATOR_VOLTAGE,			\
		.id = MT6359_ID_##_name,			\
		.owner = THIS_MODULE,				\
		.uV_step = (step),				\
		.n_voltages = ((max) - (min)) / (step) + 1,	\
		.min_uV = (min),				\
		.vsel_reg = _vsel_reg,				\
		.vsel_mask = _vsel_mask,			\
		.enable_reg = _enable_reg,			\
		.enable_mask = BIT(0),				\
	},							\
	.status_reg = _status_reg,				\
	.qi = BIT(0),						\
}

#define MT6359_LDO(match, _name, supply, _volt_table,		\
	_enable_reg, _enable_mask, _status_reg,			\
	_vsel_reg, _vsel_mask, _en_delay)			\
[MT6359_ID_##_name] = {						\
	.desc = {						\
		.name = #_name,					\
		.supply_name = supply,				\
		.of_match = of_match_ptr(match),		\
		.regulators_node = of_match_ptr("regulators"),	\
		.ops = &mt6359_volt_table_ops,			\
		.type = REGULATOR_VOLTAGE,			\
		.id = MT6359_ID_##_name,			\
		.owner = THIS_MODULE,				\
		.n_voltages = ARRAY_SIZE(_volt_table),		\
		.volt_table = _volt_table,			\
		.vsel_reg = _vsel_reg,				\
		.vsel_mask = _vsel_mask,			\
		.enable_reg = _enable_reg,			\
		.enable_mask = BIT(_enable_mask),		\
		.enable_time = _en_delay,			\
	},							\
	.status_reg = _status_reg,				\
	.qi = BIT(0),						\
}

Annotation

Implementation Notes