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()
75 return -1; in bbc_spkr_event()
85 return -1; in bbc_spkr_event()
93 spin_lock_irqsave(&state->lock, flags); in bbc_spkr_event()
96 sbus_writeb(0x01, info->regs + 0); in bbc_spkr_event()
97 sbus_writeb(0x00, info->regs + 2); in bbc_spkr_event()
98 sbus_writeb((count >> 16) & 0xff, info->regs + 3); in bbc_spkr_event()
99 sbus_writeb((count >> 8) & 0xff, info->regs + 4); in bbc_spkr_event()
100 sbus_writeb(0x00, info->regs + 5); in bbc_spkr_event()
102 sbus_writeb(0x00, info->regs + 0); in bbc_spkr_event()
105 spin_unlock_irqrestore(&state->lock, flags); in bbc_spkr_event()
112 struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent); in grover_spkr_event()
113 struct grover_beep_info *info = &state->u.grover; in grover_spkr_event()
118 return -1; in grover_spkr_event()
128 return -1; in grover_spkr_event()
134 spin_lock_irqsave(&state->lock, flags); in grover_spkr_event()
138 sbus_writeb(sbus_readb(info->enable_reg) | 3, info->enable_reg); in grover_spkr_event()
140 sbus_writeb(0xB6, info->freq_regs + 1); in grover_spkr_event()
141 /* select desired HZ */ in grover_spkr_event()
142 sbus_writeb(count & 0xff, info->freq_regs + 0); in grover_spkr_event()
143 sbus_writeb((count >> 8) & 0xff, info->freq_regs + 0); in grover_spkr_event()
146 sbus_writeb(sbus_readb(info->enable_reg) & 0xFC, info->enable_reg); in grover_spkr_event()
149 spin_unlock_irqrestore(&state->lock, flags); in grover_spkr_event()
162 return -ENOMEM; in sparcspkr_probe()
164 input_dev->name = state->name; in sparcspkr_probe()
165 input_dev->phys = "sparc/input0"; in sparcspkr_probe()
166 input_dev->id.bustype = BUS_ISA; in sparcspkr_probe()
167 input_dev->id.vendor = 0x001f; in sparcspkr_probe()
168 input_dev->id.product = 0x0001; in sparcspkr_probe()
169 input_dev->id.version = 0x0100; in sparcspkr_probe()
170 input_dev->dev.parent = dev; in sparcspkr_probe()
172 input_dev->evbit[0] = BIT_MASK(EV_SND); in sparcspkr_probe()
173 input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); in sparcspkr_probe()
175 input_dev->event = state->event; in sparcspkr_probe()
183 state->input_dev = input_dev; in sparcspkr_probe()
191 struct input_dev *input_dev = state->input_dev; in sparcspkr_shutdown()
194 state->event(input_dev, EV_SND, SND_BELL, 0); in sparcspkr_shutdown()
202 int err = -ENOMEM; in bbc_beep_probe()
208 state->name = "Sparc BBC Speaker"; in bbc_beep_probe()
209 state->event = bbc_spkr_event; in bbc_beep_probe()
210 spin_lock_init(&state->lock); in bbc_beep_probe()
213 err = -ENODEV; in bbc_beep_probe()
217 info = &state->u.bbc; in bbc_beep_probe()
218 info->clock_freq = of_getintprop_default(dp, "clock-frequency", 0); in bbc_beep_probe()
220 if (!info->clock_freq) in bbc_beep_probe()
223 info->regs = of_ioremap(&op->resource[0], 0, 6, "bbc beep"); in bbc_beep_probe()
224 if (!info->regs) in bbc_beep_probe()
229 err = sparcspkr_probe(&op->dev); in bbc_beep_probe()
236 of_iounmap(&op->resource[0], info->regs, 6); in bbc_beep_probe()
247 struct input_dev *input_dev = state->input_dev; in bbc_remove()
248 struct bbc_beep_info *info = &state->u.bbc; in bbc_remove()
251 state->event(input_dev, EV_SND, SND_BELL, 0); in bbc_remove()
255 of_iounmap(&op->resource[0], info->regs, 6); in bbc_remove()
265 .compatible = "SUNW,bbc-beep",
285 int err = -ENOMEM; in grover_beep_probe()
291 state->name = "Sparc Grover Speaker"; in grover_beep_probe()
292 state->event = grover_spkr_event; in grover_beep_probe()
293 spin_lock_init(&state->lock); in grover_beep_probe()
295 info = &state->u.grover; in grover_beep_probe()
296 info->freq_regs = of_ioremap(&op->resource[2], 0, 2, "grover beep freq"); in grover_beep_probe()
297 if (!info->freq_regs) in grover_beep_probe()
300 info->enable_reg = of_ioremap(&op->resource[3], 0, 1, "grover beep enable"); in grover_beep_probe()
301 if (!info->enable_reg) in grover_beep_probe()
306 err = sparcspkr_probe(&op->dev); in grover_beep_probe()
313 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_beep_probe()
316 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_beep_probe()
326 struct grover_beep_info *info = &state->u.grover; in grover_remove()
327 struct input_dev *input_dev = state->input_dev; in grover_remove()
330 state->event(input_dev, EV_SND, SND_BELL, 0); in grover_remove()
334 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_remove()
335 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_remove()
345 .compatible = "SUNW,smbus-beep",