drivers/iio/adc/pac1934.c

Source file repositories/reference/linux-study-clean/drivers/iio/adc/pac1934.c

File Facts

System
Linux kernel
Corpus path
drivers/iio/adc/pac1934.c
Extension
.c
Size
48810 bytes
Lines
1633
Domain
Driver Families
Bucket
drivers/iio
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 pac1934_features {
	u8		phys_channels;
	const char	*name;
};

static const unsigned int samp_rate_map_tbl[] = {
	[PAC1934_SAMP_1024SPS] = 1024,
	[PAC1934_SAMP_256SPS] = 256,
	[PAC1934_SAMP_64SPS] = 64,
	[PAC1934_SAMP_8SPS] = 8,
};

static const struct pac1934_features pac1934_chip_config[] = {
	[PAC1931] = {
	    .phys_channels = 1,
	    .name = "pac1931",
	},
	[PAC1932] = {
	    .phys_channels = 2,
	    .name = "pac1932",
	},
	[PAC1933] = {
	    .phys_channels = 3,
	    .name = "pac1933",
	},
	[PAC1934] = {
	    .phys_channels = 4,
	    .name = "pac1934",
	},
};

/**
 * struct reg_data - data from the registers
 * @meas_regs:			snapshot of raw measurements registers
 * @ctrl_regs:			snapshot of control registers
 * @energy_sec_acc:		snapshot of energy values
 * @vpower_acc:			accumulated vpower values
 * @vpower:			snapshot of vpower registers
 * @vbus:			snapshot of vbus registers
 * @vbus_avg:			averages of vbus registers
 * @vsense:			snapshot of vsense registers
 * @vsense_avg:			averages of vsense registers
 * @num_enabled_channels:	count of how many chip channels are currently enabled
 */
struct reg_data {
	u8	meas_regs[PAC1934_MEAS_REG_LEN];
	u8	ctrl_regs[PAC1934_CTRL_REG_LEN];
	s64	energy_sec_acc[PAC1934_MAX_NUM_CHANNELS];
	s64	vpower_acc[PAC1934_MAX_NUM_CHANNELS];
	s32	vpower[PAC1934_MAX_NUM_CHANNELS];
	s32	vbus[PAC1934_MAX_NUM_CHANNELS];
	s32	vbus_avg[PAC1934_MAX_NUM_CHANNELS];
	s32	vsense[PAC1934_MAX_NUM_CHANNELS];
	s32	vsense_avg[PAC1934_MAX_NUM_CHANNELS];
	u8	num_enabled_channels;
};

/**
 * struct pac1934_chip_info - information about the chip
 * @client:			the i2c-client attached to the device
 * @lock:			synchronize access to driver's state members
 * @work_chip_rfsh:		work queue used for refresh commands
 * @phys_channels:		phys channels count
 * @active_channels:		array of values, true means that channel is active
 * @enable_energy:		array of values, true means that channel energy is measured
 * @bi_dir:			array of bools, true means that channel is bidirectional
 * @chip_variant:		chip variant
 * @chip_revision:		chip revision
 * @shunts:			shunts
 * @chip_reg_data:		chip reg data
 * @sample_rate_value:		sampling frequency
 * @labels:			table with channels labels
 * @iio_info:			iio_info
 * @tstamp:			chip's uptime
 */
struct pac1934_chip_info {
	struct i2c_client	*client;
	struct mutex		lock; /* synchronize access to driver's state members */
	struct delayed_work	work_chip_rfsh;
	u8			phys_channels;
	bool			active_channels[PAC1934_MAX_NUM_CHANNELS];
	bool			enable_energy[PAC1934_MAX_NUM_CHANNELS];
	bool			bi_dir[PAC1934_MAX_NUM_CHANNELS];
	u8			chip_variant;
	u8			chip_revision;
	u32			shunts[PAC1934_MAX_NUM_CHANNELS];
	struct reg_data		chip_reg_data;
	s32			sample_rate_value;
	char			*labels[PAC1934_MAX_NUM_CHANNELS];
	struct iio_info		iio_info;

Annotation

Implementation Notes