Lines Matching +full:beeper +full:- +full:hz

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Driver for PC-speaker like devices found on various Sparc systems.
19 MODULE_DESCRIPTION("Sparc Speaker beeper driver");
45 u32 val, clock_freq = info->clock_freq; in bbc_count_to_reg()
58 for (i = 19; i >= 11; i--) { in bbc_count_to_reg()
69 struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent); in bbc_spkr_event()
70 struct bbc_beep_info *info = &state->u.bbc; in bbc_spkr_event()
74 return -1; in bbc_spkr_event()
84 return -1; in bbc_spkr_event()
92 guard(spinlock_irqsave)(&state->lock); in bbc_spkr_event()
95 sbus_writeb(0x01, info->regs + 0); in bbc_spkr_event()
96 sbus_writeb(0x00, info->regs + 2); in bbc_spkr_event()
97 sbus_writeb((count >> 16) & 0xff, info->regs + 3); in bbc_spkr_event()
98 sbus_writeb((count >> 8) & 0xff, info->regs + 4); in bbc_spkr_event()
99 sbus_writeb(0x00, info->regs + 5); in bbc_spkr_event()
101 sbus_writeb(0x00, info->regs + 0); in bbc_spkr_event()
109 struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent); in grover_spkr_event()
110 struct grover_beep_info *info = &state->u.grover; in grover_spkr_event()
114 return -1; in grover_spkr_event()
124 return -1; in grover_spkr_event()
130 guard(spinlock_irqsave)(&state->lock); in grover_spkr_event()
134 sbus_writeb(sbus_readb(info->enable_reg) | 3, info->enable_reg); in grover_spkr_event()
136 sbus_writeb(0xB6, info->freq_regs + 1); in grover_spkr_event()
137 /* select desired HZ */ in grover_spkr_event()
138 sbus_writeb(count & 0xff, info->freq_regs + 0); in grover_spkr_event()
139 sbus_writeb((count >> 8) & 0xff, info->freq_regs + 0); in grover_spkr_event()
142 sbus_writeb(sbus_readb(info->enable_reg) & 0xFC, info->enable_reg); in grover_spkr_event()
156 return -ENOMEM; in sparcspkr_probe()
158 input_dev->name = state->name; in sparcspkr_probe()
159 input_dev->phys = "sparc/input0"; in sparcspkr_probe()
160 input_dev->id.bustype = BUS_ISA; in sparcspkr_probe()
161 input_dev->id.vendor = 0x001f; in sparcspkr_probe()
162 input_dev->id.product = 0x0001; in sparcspkr_probe()
163 input_dev->id.version = 0x0100; in sparcspkr_probe()
164 input_dev->dev.parent = dev; in sparcspkr_probe()
166 input_dev->evbit[0] = BIT_MASK(EV_SND); in sparcspkr_probe()
167 input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); in sparcspkr_probe()
169 input_dev->event = state->event; in sparcspkr_probe()
177 state->input_dev = input_dev; in sparcspkr_probe()
185 struct input_dev *input_dev = state->input_dev; in sparcspkr_shutdown()
188 state->event(input_dev, EV_SND, SND_BELL, 0); in sparcspkr_shutdown()
197 state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL); in bbc_beep_probe()
199 return -ENOMEM; in bbc_beep_probe()
201 state->name = "Sparc BBC Speaker"; in bbc_beep_probe()
202 state->event = bbc_spkr_event; in bbc_beep_probe()
203 spin_lock_init(&state->lock); in bbc_beep_probe()
207 return -ENODEV; in bbc_beep_probe()
209 info = &state->u.bbc; in bbc_beep_probe()
210 info->clock_freq = of_getintprop_default(dp, "clock-frequency", 0); in bbc_beep_probe()
211 if (!info->clock_freq) in bbc_beep_probe()
212 return -ENODEV; in bbc_beep_probe()
214 info->regs = of_ioremap(&op->resource[0], 0, 6, "bbc beep"); in bbc_beep_probe()
215 if (!info->regs) in bbc_beep_probe()
216 return -ENODEV; in bbc_beep_probe()
220 err = sparcspkr_probe(&op->dev); in bbc_beep_probe()
222 of_iounmap(&op->resource[0], info->regs, 6); in bbc_beep_probe()
232 struct input_dev *input_dev = state->input_dev; in bbc_remove()
233 struct bbc_beep_info *info = &state->u.bbc; in bbc_remove()
236 state->event(input_dev, EV_SND, SND_BELL, 0); in bbc_remove()
240 of_iounmap(&op->resource[0], info->regs, 6); in bbc_remove()
246 .compatible = "SUNW,bbc-beep",
266 int err = -ENOMEM; in grover_beep_probe()
268 state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL); in grover_beep_probe()
272 state->name = "Sparc Grover Speaker"; in grover_beep_probe()
273 state->event = grover_spkr_event; in grover_beep_probe()
274 spin_lock_init(&state->lock); in grover_beep_probe()
276 info = &state->u.grover; in grover_beep_probe()
277 info->freq_regs = of_ioremap(&op->resource[2], 0, 2, "grover beep freq"); in grover_beep_probe()
278 if (!info->freq_regs) in grover_beep_probe()
281 info->enable_reg = of_ioremap(&op->resource[3], 0, 1, "grover beep enable"); in grover_beep_probe()
282 if (!info->enable_reg) in grover_beep_probe()
287 err = sparcspkr_probe(&op->dev); in grover_beep_probe()
294 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_beep_probe()
297 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_beep_probe()
305 struct grover_beep_info *info = &state->u.grover; in grover_remove()
306 struct input_dev *input_dev = state->input_dev; in grover_remove()
309 state->event(input_dev, EV_SND, SND_BELL, 0); in grover_remove()
313 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_remove()
314 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_remove()
320 .compatible = "SUNW,smbus-beep",