Lines Matching refs:keypad
55 struct nspire_keypad *keypad = dev_id; in nspire_keypad_irq() local
56 struct input_dev *input = keypad->input; in nspire_keypad_irq()
64 int_sts = readl(keypad->reg_base + KEYPAD_INT) & keypad->int_mask; in nspire_keypad_irq()
68 memcpy_fromio(state, keypad->reg_base + KEYPAD_DATA, sizeof(state)); in nspire_keypad_irq()
72 if (keypad->active_low) in nspire_keypad_irq()
75 changed = bits ^ keypad->state[row]; in nspire_keypad_irq()
79 keypad->state[row] = bits; in nspire_keypad_irq()
85 code = MATRIX_SCAN_CODE(row, col, keypad->row_shift); in nspire_keypad_irq()
94 writel(0x3, keypad->reg_base + KEYPAD_INT); in nspire_keypad_irq()
99 static int nspire_keypad_chip_init(struct nspire_keypad *keypad) in nspire_keypad_chip_init() argument
103 cycles_per_us = (clk_get_rate(keypad->clk) / 1000000); in nspire_keypad_chip_init()
107 delay_cycles = cycles_per_us * keypad->scan_interval; in nspire_keypad_chip_init()
111 row_delay_cycles = cycles_per_us * keypad->row_delay; in nspire_keypad_chip_init()
118 writel(val, keypad->reg_base + KEYPAD_SCAN_MODE); in nspire_keypad_chip_init()
121 writel(val, keypad->reg_base + KEYPAD_CNTL); in nspire_keypad_chip_init()
124 keypad->int_mask = 1 << 1; in nspire_keypad_chip_init()
125 writel(keypad->int_mask, keypad->reg_base + KEYPAD_INTMSK); in nspire_keypad_chip_init()
129 writel(0, keypad->reg_base + KEYPAD_UNKNOWN_INT); in nspire_keypad_chip_init()
131 writel(~0, keypad->reg_base + KEYPAD_UNKNOWN_INT_STS); in nspire_keypad_chip_init()
138 struct nspire_keypad *keypad = input_get_drvdata(input); in nspire_keypad_open() local
141 error = clk_prepare_enable(keypad->clk); in nspire_keypad_open()
145 error = nspire_keypad_chip_init(keypad); in nspire_keypad_open()
147 clk_disable_unprepare(keypad->clk); in nspire_keypad_open()
156 struct nspire_keypad *keypad = input_get_drvdata(input); in nspire_keypad_close() local
158 clk_disable_unprepare(keypad->clk); in nspire_keypad_close()
164 struct nspire_keypad *keypad; in nspire_keypad_probe() local
176 keypad = devm_kzalloc(&pdev->dev, sizeof(struct nspire_keypad), in nspire_keypad_probe()
178 if (!keypad) { in nspire_keypad_probe()
183 keypad->row_shift = get_count_order(KEYPAD_BITMASK_COLS); in nspire_keypad_probe()
186 &keypad->scan_interval); in nspire_keypad_probe()
193 &keypad->row_delay); in nspire_keypad_probe()
199 keypad->active_low = of_property_read_bool(of_node, "active-low"); in nspire_keypad_probe()
201 keypad->clk = devm_clk_get(&pdev->dev, NULL); in nspire_keypad_probe()
202 if (IS_ERR(keypad->clk)) { in nspire_keypad_probe()
204 return PTR_ERR(keypad->clk); in nspire_keypad_probe()
208 keypad->reg_base = devm_ioremap_resource(&pdev->dev, res); in nspire_keypad_probe()
209 if (IS_ERR(keypad->reg_base)) in nspire_keypad_probe()
210 return PTR_ERR(keypad->reg_base); in nspire_keypad_probe()
212 keypad->input = input = devm_input_allocate_device(&pdev->dev); in nspire_keypad_probe()
218 input_set_drvdata(input, keypad); in nspire_keypad_probe()
239 "nspire_keypad", keypad); in nspire_keypad_probe()
254 res, keypad->row_delay, keypad->scan_interval, in nspire_keypad_probe()
255 keypad->active_low ? ", active_low" : ""); in nspire_keypad_probe()