/** * struct drv2667_data - * @input_dev: Pointer to the input device * @client: Pointer to the I2C client * @regmap: Register map of the device * @work: Work item used to off load the enable/disable of the vibration * @regulator: Pointer to the regulator for the IC * @page: Page number * @magnitude: Magnitude of the vibration event * @frequency: Frequency of the vibration event
**/ struct drv2667_data { struct input_dev *input_dev; struct i2c_client *client; struct regmap *regmap; struct work_struct work; struct regulator *regulator;
u32 page;
u32 magnitude;
u32 frequency;
};
staticint drv2667_set_waveform_freq(struct drv2667_data *haptics)
{ unsignedint read_buf; int freq; int error;
/* Per the data sheet: * Sinusoid Frequency (Hz) = 7.8125 x Frequency
*/
freq = (haptics->frequency * 1000) / 78125; if (freq <= 0) {
dev_err(&haptics->client->dev, "ERROR: Frequency calculated to %i\n", freq); return -EINVAL;
}
error = regmap_read(haptics->regmap, DRV2667_PAGE, &read_buf); if (error) {
dev_err(&haptics->client->dev, "Failed to read the page number: %d\n", error); return -EIO;
}
if (read_buf == DRV2667_PAGE_0 ||
haptics->page != read_buf) {
error = regmap_write(haptics->regmap,
DRV2667_PAGE, haptics->page); if (error) {
dev_err(&haptics->client->dev, "Failed to set the page: %d\n", error); return -EIO;
}
}
error = regmap_write(haptics->regmap, DRV2667_RAM_FREQ, freq); if (error)
dev_err(&haptics->client->dev, "Failed to set the frequency: %d\n", error);
/* Reset back to original page */ if (read_buf == DRV2667_PAGE_0 ||
haptics->page != read_buf) {
error = regmap_write(haptics->regmap, DRV2667_PAGE, read_buf); if (error) {
dev_err(&haptics->client->dev, "Failed to set the page: %d\n", error); return -EIO;
}
}
if (haptics->magnitude) {
error = regmap_write(haptics->regmap,
DRV2667_PAGE, haptics->page); if (error) {
dev_err(&haptics->client->dev, "Failed to set the page: %d\n", error); return;
}
error = regmap_write(haptics->regmap, DRV2667_RAM_AMP,
haptics->magnitude); if (error) {
dev_err(&haptics->client->dev, "Failed to set the amplitude: %d\n", error); return;
}
error = regmap_write(haptics->regmap,
DRV2667_PAGE, DRV2667_PAGE_0); if (error) {
dev_err(&haptics->client->dev, "Failed to set the page: %d\n", error); return;
}
error = regmap_write(haptics->regmap,
DRV2667_CTRL_2, DRV2667_GO); if (error) {
dev_err(&haptics->client->dev, "Failed to set the GO bit: %d\n", error);
}
} else {
error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
DRV2667_GO, 0); if (error) {
dev_err(&haptics->client->dev, "Failed to unset the GO bit: %d\n", error);
}
}
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.1Bemerkung:
(vorverarbeitet am 2026-06-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.