max7360_rotary
struct max7360_rotary *max7360_rotary;
max7360_rotary = devm_kzalloc(dev, sizeof(*max7360_rotary), GFP_KERNEL);
if (!max7360_rotary)
max7360_rotary->regmap = regmap;
device_property_read_u32(dev->parent, "linux,axis", &max7360_rotary->axis);
max7360_rotary->rollover = device_property_read_bool(dev->parent,
max7360_rotary->relative_axis =
&max7360_rotary->steps);
max7360_rotary->steps = MAX7360_ROTARY_DEFAULT_STEPS;
&max7360_rotary->debounce_ms);
if (max7360_rotary->debounce_ms > MAX7360_ROT_DEBOUNCE_MAX)
max7360_rotary->debounce_ms);
max7360_rotary->input = input;
if (max7360_rotary->relative_axis)
input_set_capability(input, EV_REL, max7360_rotary->axis);
input_set_abs_params(input, max7360_rotary->axis, 0, max7360_rotary->steps, 0, 1);
"max7360-rotary", max7360_rotary);
error = max7360_rotary_hw_init(max7360_rotary);
static void max7360_rotary_report_event(struct max7360_rotary *max7360_rotary, int steps)
if (max7360_rotary->relative_axis) {
input_report_rel(max7360_rotary->input, max7360_rotary->axis, steps);
int pos = max7360_rotary->pos;
int maxval = max7360_rotary->steps;
if (max7360_rotary->rollover)
max7360_rotary->pos = pos;
input_report_abs(max7360_rotary->input, max7360_rotary->axis, max7360_rotary->pos);
input_sync(max7360_rotary->input);
struct max7360_rotary *max7360_rotary = data;
struct device *dev = max7360_rotary->input->dev.parent;
error = regmap_read(max7360_rotary->regmap, MAX7360_REG_RTR_CNT, &val);
max7360_rotary_report_event(max7360_rotary, sign_extend32(val, 7));
static int max7360_rotary_hw_init(struct max7360_rotary *max7360_rotary)
struct device *dev = max7360_rotary->input->dev.parent;
val = FIELD_PREP(MAX7360_ROT_DEBOUNCE, max7360_rotary->debounce_ms) |
error = regmap_write(max7360_rotary->regmap, MAX7360_REG_RTRCFG, val);