drivers/regulator/mt6357-regulator.c

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

File Facts

System
Linux kernel
Corpus path
drivers/regulator/mt6357-regulator.c
Extension
.c
Size
11390 bytes
Lines
455
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 mt6357_regulator_info {
	struct regulator_desc desc;
	u32 da_vsel_reg;
	u32 da_vsel_mask;
};

#define MT6357_BUCK(match, vreg, min, max, step,		\
	volt_ranges, vosel_reg, vosel_mask, _da_vsel_mask)	\
[MT6357_ID_##vreg] = {		\
	.desc = {		\
		.name = #vreg,	\
		.of_match = of_match_ptr(match),		\
		.regulators_node = "regulators",		\
		.ops = &mt6357_volt_range_ops,	\
		.type = REGULATOR_VOLTAGE,	\
		.id = MT6357_ID_##vreg,		\
		.owner = THIS_MODULE,		\
		.n_voltages = ((max) - (min)) / (step) + 1,	\
		.linear_ranges = volt_ranges,			\
		.n_linear_ranges = ARRAY_SIZE(volt_ranges),	\
		.vsel_reg = vosel_reg,		\
		.vsel_mask = vosel_mask,	\
		.enable_reg = MT6357_BUCK_##vreg##_CON0,	\
		.enable_mask = BIT(0),		\
	},	\
	.da_vsel_reg = MT6357_BUCK_##vreg##_DBG0,		\
	.da_vsel_mask = vosel_mask,		\
}

#define MT6357_LDO(match, vreg, ldo_volt_table,	\
	enreg, vosel, vosel_mask)		\
[MT6357_ID_##vreg] = {		\
	.desc = {		\
		.name = #vreg,	\
		.of_match = of_match_ptr(match),		\
		.regulators_node = "regulators",		\
		.ops = &mt6357_volt_table_ops,	\
		.type = REGULATOR_VOLTAGE,	\
		.id = MT6357_ID_##vreg,		\
		.owner = THIS_MODULE,		\
		.n_voltages = ARRAY_SIZE(ldo_volt_table),	\
		.volt_table = ldo_volt_table,	\
		.vsel_reg = vosel,		\
		.vsel_mask = vosel_mask,	\
		.enable_reg = enreg,		\
		.enable_mask = BIT(0),		\
	},	\
}

#define MT6357_LDO1(match, vreg, min, max, step, volt_ranges,	\
	enreg, vosel, vosel_mask)		\
[MT6357_ID_##vreg] = {		\
	.desc = {		\
		.name = #vreg,	\
		.of_match = of_match_ptr(match),		\
		.regulators_node = "regulators",		\
		.ops = &mt6357_volt_range_ops,	\
		.type = REGULATOR_VOLTAGE,	\
		.id = MT6357_ID_##vreg,		\
		.owner = THIS_MODULE,		\
		.n_voltages = ((max) - (min)) / (step) + 1,	\
		.linear_ranges = volt_ranges,	\
		.n_linear_ranges = ARRAY_SIZE(volt_ranges),	\
		.vsel_reg = vosel,		\
		.vsel_mask = vosel_mask,	\
		.enable_reg = enreg,		\
		.enable_mask = BIT(0),		\
	},	\
	.da_vsel_reg = MT6357_LDO_##vreg##_DBG0,		\
	.da_vsel_mask = 0x7f00,	\
}

#define MT6357_REG_FIXED(match, vreg, volt)	\
[MT6357_ID_##vreg] = {					\
	.desc = {					\
		.name = #vreg,				\
		.of_match = of_match_ptr(match),	\
		.regulators_node = "regulators",	\
		.ops = &mt6357_volt_fixed_ops,		\
		.type = REGULATOR_VOLTAGE,		\
		.id = MT6357_ID_##vreg,			\
		.owner = THIS_MODULE,			\
		.n_voltages = 1,			\
		.enable_reg = MT6357_LDO_##vreg##_CON0,	\
		.enable_mask = BIT(0),			\
		.min_uV = volt,				\
	},						\
}

/**

Annotation

Implementation Notes