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()
79 default: return -1; in bbc_spkr_event()
87 guard(spinlock_irqsave)(&state->lock); in bbc_spkr_event()
90 sbus_writeb(0x01, info->regs + 0); in bbc_spkr_event()
91 sbus_writeb(0x00, info->regs + 2); in bbc_spkr_event()
92 sbus_writeb((count >> 16) & 0xff, info->regs + 3); in bbc_spkr_event()
93 sbus_writeb((count >> 8) & 0xff, info->regs + 4); in bbc_spkr_event()
94 sbus_writeb(0x00, info->regs + 5); in bbc_spkr_event()
96 sbus_writeb(0x00, info->regs + 0); in bbc_spkr_event()
104 struct sparcspkr_state *state = dev_get_drvdata(dev->dev.parent); in grover_spkr_event()
105 struct grover_beep_info *info = &state->u.grover; in grover_spkr_event()
109 return -1; in grover_spkr_event()
114 default: return -1; in grover_spkr_event()
120 guard(spinlock_irqsave)(&state->lock); in grover_spkr_event()
124 sbus_writeb(sbus_readb(info->enable_reg) | 3, info->enable_reg); in grover_spkr_event()
126 sbus_writeb(0xB6, info->freq_regs + 1); in grover_spkr_event()
127 /* select desired HZ */ in grover_spkr_event()
128 sbus_writeb(count & 0xff, info->freq_regs + 0); in grover_spkr_event()
129 sbus_writeb((count >> 8) & 0xff, info->freq_regs + 0); in grover_spkr_event()
132 sbus_writeb(sbus_readb(info->enable_reg) & 0xFC, info->enable_reg); in grover_spkr_event()
146 return -ENOMEM; in sparcspkr_probe()
148 input_dev->name = state->name; in sparcspkr_probe()
149 input_dev->phys = "sparc/input0"; in sparcspkr_probe()
150 input_dev->id.bustype = BUS_ISA; in sparcspkr_probe()
151 input_dev->id.vendor = 0x001f; in sparcspkr_probe()
152 input_dev->id.product = 0x0001; in sparcspkr_probe()
153 input_dev->id.version = 0x0100; in sparcspkr_probe()
154 input_dev->dev.parent = dev; in sparcspkr_probe()
156 input_dev->evbit[0] = BIT_MASK(EV_SND); in sparcspkr_probe()
157 input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE); in sparcspkr_probe()
159 input_dev->event = state->event; in sparcspkr_probe()
167 state->input_dev = input_dev; in sparcspkr_probe()
175 struct input_dev *input_dev = state->input_dev; in sparcspkr_shutdown()
178 state->event(input_dev, EV_SND, SND_BELL, 0); in sparcspkr_shutdown()
187 state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL); in bbc_beep_probe()
189 return -ENOMEM; in bbc_beep_probe()
191 state->name = "Sparc BBC Speaker"; in bbc_beep_probe()
192 state->event = bbc_spkr_event; in bbc_beep_probe()
193 spin_lock_init(&state->lock); in bbc_beep_probe()
197 return -ENODEV; in bbc_beep_probe()
199 info = &state->u.bbc; in bbc_beep_probe()
200 info->clock_freq = of_getintprop_default(dp, "clock-frequency", 0); in bbc_beep_probe()
201 if (!info->clock_freq) in bbc_beep_probe()
202 return -ENODEV; in bbc_beep_probe()
204 info->regs = of_ioremap(&op->resource[0], 0, 6, "bbc beep"); in bbc_beep_probe()
205 if (!info->regs) in bbc_beep_probe()
206 return -ENODEV; in bbc_beep_probe()
210 err = sparcspkr_probe(&op->dev); in bbc_beep_probe()
212 of_iounmap(&op->resource[0], info->regs, 6); in bbc_beep_probe()
222 struct input_dev *input_dev = state->input_dev; in bbc_remove()
223 struct bbc_beep_info *info = &state->u.bbc; in bbc_remove()
226 state->event(input_dev, EV_SND, SND_BELL, 0); in bbc_remove()
230 of_iounmap(&op->resource[0], info->regs, 6); in bbc_remove()
236 .compatible = "SUNW,bbc-beep",
256 int err = -ENOMEM; in grover_beep_probe()
258 state = devm_kzalloc(&op->dev, sizeof(*state), GFP_KERNEL); in grover_beep_probe()
262 state->name = "Sparc Grover Speaker"; in grover_beep_probe()
263 state->event = grover_spkr_event; in grover_beep_probe()
264 spin_lock_init(&state->lock); in grover_beep_probe()
266 info = &state->u.grover; in grover_beep_probe()
267 info->freq_regs = of_ioremap(&op->resource[2], 0, 2, "grover beep freq"); in grover_beep_probe()
268 if (!info->freq_regs) in grover_beep_probe()
271 info->enable_reg = of_ioremap(&op->resource[3], 0, 1, "grover beep enable"); in grover_beep_probe()
272 if (!info->enable_reg) in grover_beep_probe()
277 err = sparcspkr_probe(&op->dev); in grover_beep_probe()
284 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_beep_probe()
287 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_beep_probe()
295 struct grover_beep_info *info = &state->u.grover; in grover_remove()
296 struct input_dev *input_dev = state->input_dev; in grover_remove()
299 state->event(input_dev, EV_SND, SND_BELL, 0); in grover_remove()
303 of_iounmap(&op->resource[3], info->enable_reg, 1); in grover_remove()
304 of_iounmap(&op->resource[2], info->freq_regs, 2); in grover_remove()
310 .compatible = "SUNW,smbus-beep",