drivers/input/keyboard/qt1050.c

Source file repositories/reference/linux-study-clean/drivers/input/keyboard/qt1050.c

File Facts

System
Linux kernel
Corpus path
drivers/input/keyboard/qt1050.c
Extension
.c
Size
15062 bytes
Lines
598
Domain
Driver Families
Bucket
drivers/input
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 qt1050_key_regs {
	unsigned int nthr;
	unsigned int pulse_scale;
	unsigned int di_aks;
	unsigned int csd;
};

struct qt1050_key {
	u32 num;
	u32 charge_delay;
	u32 thr_cnt;
	u32 samples;
	u32 scale;
	u32 keycode;
};

struct qt1050_priv {
	struct i2c_client	*client;
	struct input_dev	*input;
	struct regmap		*regmap;
	struct qt1050_key	keys[QT1050_MAX_KEYS];
	unsigned short		keycodes[QT1050_MAX_KEYS];
	u8			reg_keys;
	u8			last_keys;
};

static const struct qt1050_key_regs qt1050_key_regs_data[] = {
	{
		.nthr = QT1050_NTHR_0,
		.pulse_scale = QT1050_PULSE_SCALE_0,
		.di_aks = QT1050_DI_AKS_0,
		.csd = QT1050_CSD_0,
	}, {
		.nthr = QT1050_NTHR_1,
		.pulse_scale = QT1050_PULSE_SCALE_1,
		.di_aks = QT1050_DI_AKS_1,
		.csd = QT1050_CSD_1,
	}, {
		.nthr = QT1050_NTHR_2,
		.pulse_scale = QT1050_PULSE_SCALE_2,
		.di_aks = QT1050_DI_AKS_2,
		.csd = QT1050_CSD_2,
	}, {
		.nthr = QT1050_NTHR_3,
		.pulse_scale = QT1050_PULSE_SCALE_3,
		.di_aks = QT1050_DI_AKS_3,
		.csd = QT1050_CSD_3,
	}, {
		.nthr = QT1050_NTHR_4,
		.pulse_scale = QT1050_PULSE_SCALE_4,
		.di_aks = QT1050_DI_AKS_4,
		.csd = QT1050_CSD_4,
	}
};

static bool qt1050_volatile_reg(struct device *dev, unsigned int reg)
{
	switch (reg) {
	case QT1050_DET_STATUS:
	case QT1050_KEY_STATUS:
	case QT1050_KEY_SIGNAL_0_MSB:
	case QT1050_KEY_SIGNAL_0_LSB:
	case QT1050_KEY_SIGNAL_1_MSB:
	case QT1050_KEY_SIGNAL_1_LSB:
	case QT1050_KEY_SIGNAL_2_MSB:
	case QT1050_KEY_SIGNAL_2_LSB:
	case QT1050_KEY_SIGNAL_3_MSB:
	case QT1050_KEY_SIGNAL_3_LSB:
	case QT1050_KEY_SIGNAL_4_MSB:
	case QT1050_KEY_SIGNAL_4_LSB:
		return true;
	default:
		return false;
	}
}

static const struct regmap_range qt1050_readable_ranges[] = {
	regmap_reg_range(QT1050_CHIP_ID, QT1050_KEY_STATUS),
	regmap_reg_range(QT1050_KEY_SIGNAL_0_MSB, QT1050_KEY_SIGNAL_1_LSB),
	regmap_reg_range(QT1050_KEY_SIGNAL_2_MSB, QT1050_KEY_SIGNAL_4_LSB),
	regmap_reg_range(QT1050_REF_DATA_0_MSB, QT1050_REF_DATA_1_LSB),
	regmap_reg_range(QT1050_REF_DATA_2_MSB, QT1050_REF_DATA_4_LSB),
	regmap_reg_range(QT1050_NTHR_0, QT1050_NTHR_1),
	regmap_reg_range(QT1050_NTHR_2, QT1050_NTHR_4),
	regmap_reg_range(QT1050_PULSE_SCALE_0, QT1050_PULSE_SCALE_1),
	regmap_reg_range(QT1050_PULSE_SCALE_2, QT1050_PULSE_SCALE_4),
	regmap_reg_range(QT1050_DI_AKS_0, QT1050_DI_AKS_1),
	regmap_reg_range(QT1050_DI_AKS_2, QT1050_DI_AKS_4),
	regmap_reg_range(QT1050_CSD_0, QT1050_CSD_1),
	regmap_reg_range(QT1050_CSD_2, QT1050_RES_CAL),

Annotation

Implementation Notes