Lines Matching refs:keypad
52 struct nspire_keypad *keypad = dev_id;
53 struct input_dev *input = keypad->input;
61 int_sts = readl(keypad->reg_base + KEYPAD_INT) & keypad->int_mask;
65 memcpy_fromio(state, keypad->reg_base + KEYPAD_DATA, sizeof(state));
69 if (keypad->active_low)
72 changed = bits ^ keypad->state[row];
76 keypad->state[row] = bits;
82 code = MATRIX_SCAN_CODE(row, col, keypad->row_shift);
91 writel(0x3, keypad->reg_base + KEYPAD_INT);
98 struct nspire_keypad *keypad = input_get_drvdata(input);
102 error = clk_prepare_enable(keypad->clk);
106 cycles_per_us = (clk_get_rate(keypad->clk) / 1000000);
110 delay_cycles = cycles_per_us * keypad->scan_interval;
114 row_delay_cycles = cycles_per_us * keypad->row_delay;
121 writel(val, keypad->reg_base + KEYPAD_SCAN_MODE);
124 writel(val, keypad->reg_base + KEYPAD_CNTL);
127 keypad->int_mask = 1 << 1;
128 writel(keypad->int_mask, keypad->reg_base + KEYPAD_INTMSK);
135 struct nspire_keypad *keypad = input_get_drvdata(input);
138 writel(0, keypad->reg_base + KEYPAD_INTMSK);
140 writel(~0, keypad->reg_base + KEYPAD_INT);
142 clk_disable_unprepare(keypad->clk);
148 struct nspire_keypad *keypad;
158 keypad = devm_kzalloc(&pdev->dev, sizeof(struct nspire_keypad),
160 if (!keypad) {
161 dev_err(&pdev->dev, "failed to allocate keypad memory\n");
165 keypad->row_shift = get_count_order(KEYPAD_BITMASK_COLS);
168 &keypad->scan_interval);
175 &keypad->row_delay);
181 keypad->active_low = of_property_read_bool(of_node, "active-low");
183 keypad->clk = devm_clk_get(&pdev->dev, NULL);
184 if (IS_ERR(keypad->clk)) {
186 return PTR_ERR(keypad->clk);
189 keypad->reg_base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
190 if (IS_ERR(keypad->reg_base))
191 return PTR_ERR(keypad->reg_base);
193 keypad->input = input = devm_input_allocate_device(&pdev->dev);
199 error = clk_prepare_enable(keypad->clk);
206 writel(0, keypad->reg_base + KEYPAD_INTMSK);
208 writel(~0, keypad->reg_base + KEYPAD_INT);
212 writel(0, keypad->reg_base + KEYPAD_UNKNOWN_INT);
214 writel(~0, keypad->reg_base + KEYPAD_UNKNOWN_INT_STS);
216 clk_disable_unprepare(keypad->clk);
218 input_set_drvdata(input, keypad);
221 input->name = "nspire-keypad";
239 "nspire_keypad", keypad);
253 "TI-NSPIRE keypad at %pR (scan_interval=%uus, row_delay=%uus%s)\n",
254 res, keypad->row_delay, keypad->scan_interval,
255 keypad->active_low ? ", active_low" : "");
261 { .compatible = "ti,nspire-keypad" },
268 .name = "nspire-keypad",