Lines Matching full:rm

51 	struct rackmeter	*rm;  member
95 static void rackmeter_setup_i2s(struct rackmeter *rm) in rackmeter_setup_i2s() argument
97 struct macio_chip *macio = rm->mdev->bus->chip; in rackmeter_setup_i2s()
106 pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, rm->i2s, 0, 1); in rackmeter_setup_i2s()
121 out_le32(rm->i2s_regs + 0x10, 0x01fa0000); in rackmeter_setup_i2s()
122 (void)in_le32(rm->i2s_regs + 0x10); in rackmeter_setup_i2s()
132 static void rackmeter_set_default_pattern(struct rackmeter *rm) in rackmeter_set_default_pattern() argument
138 rm->ubuf[i] = (i & 1) * 255; in rackmeter_set_default_pattern()
140 rm->ubuf[i] = ((~i) & 1) * 255; in rackmeter_set_default_pattern()
144 static void rackmeter_do_pause(struct rackmeter *rm, int pause) in rackmeter_do_pause() argument
146 struct rackmeter_dma *rdma = rm->dma_buf_v; in rackmeter_do_pause()
150 rm->paused = pause; in rackmeter_do_pause()
152 DBDMA_DO_STOP(rm->dma_regs); in rackmeter_do_pause()
158 rm->dma_buf_v->mark = 0; in rackmeter_do_pause()
161 out_le32(&rm->dma_regs->cmdptr_hi, 0); in rackmeter_do_pause()
162 out_le32(&rm->dma_regs->cmdptr, rm->dma_buf_p); in rackmeter_do_pause()
163 out_le32(&rm->dma_regs->control, (RUN << 16) | RUN); in rackmeter_do_pause()
166 static void rackmeter_setup_dbdma(struct rackmeter *rm) in rackmeter_setup_dbdma() argument
168 struct rackmeter_dma *db = rm->dma_buf_v; in rackmeter_setup_dbdma()
172 DBDMA_DO_RESET(rm->dma_regs); in rackmeter_setup_dbdma()
185 cmd->phy_addr = cpu_to_le32(rm->dma_buf_p + in rackmeter_setup_dbdma()
192 cmd->phy_addr = cpu_to_le32(rm->dma_buf_p + in rackmeter_setup_dbdma()
198 cmd->phy_addr = cpu_to_le32(rm->dma_buf_p + in rackmeter_setup_dbdma()
205 cmd->phy_addr = cpu_to_le32(rm->dma_buf_p + in rackmeter_setup_dbdma()
207 cmd->cmd_dep = cpu_to_le32(rm->dma_buf_p); in rackmeter_setup_dbdma()
209 rackmeter_do_pause(rm, 0); in rackmeter_setup_dbdma()
216 struct rackmeter *rm = rcpu->rm; in rackmeter_do_timer() local
240 rm->ubuf[i + offset] = ub; in rackmeter_do_timer()
246 pause = (rm->cpu[0].zero && rm->cpu[1].zero); in rackmeter_do_timer()
247 if (pause != rm->paused) { in rackmeter_do_timer()
248 mutex_lock(&rm->sem); in rackmeter_do_timer()
249 pause = (rm->cpu[0].zero && rm->cpu[1].zero); in rackmeter_do_timer()
250 rackmeter_do_pause(rm, pause); in rackmeter_do_timer()
251 mutex_unlock(&rm->sem); in rackmeter_do_timer()
257 static void rackmeter_init_cpu_sniffer(struct rackmeter *rm) in rackmeter_init_cpu_sniffer() argument
267 rm->cpu[0].rm = rm; in rackmeter_init_cpu_sniffer()
268 INIT_DELAYED_WORK(&rm->cpu[0].sniffer, rackmeter_do_timer); in rackmeter_init_cpu_sniffer()
269 rm->cpu[1].rm = rm; in rackmeter_init_cpu_sniffer()
270 INIT_DELAYED_WORK(&rm->cpu[1].sniffer, rackmeter_do_timer); in rackmeter_init_cpu_sniffer()
277 rcpu = &rm->cpu[cpu]; in rackmeter_init_cpu_sniffer()
280 schedule_delayed_work_on(cpu, &rm->cpu[cpu].sniffer, in rackmeter_init_cpu_sniffer()
285 static void rackmeter_stop_cpu_sniffer(struct rackmeter *rm) in rackmeter_stop_cpu_sniffer() argument
287 cancel_delayed_work_sync(&rm->cpu[0].sniffer); in rackmeter_stop_cpu_sniffer()
288 cancel_delayed_work_sync(&rm->cpu[1].sniffer); in rackmeter_stop_cpu_sniffer()
291 static int rackmeter_setup(struct rackmeter *rm) in rackmeter_setup() argument
294 rackmeter_setup_i2s(rm); in rackmeter_setup()
297 rackmeter_set_default_pattern(rm); in rackmeter_setup()
300 rackmeter_setup_dbdma(rm); in rackmeter_setup()
303 rackmeter_init_cpu_sniffer(rm); in rackmeter_setup()
311 static u32 rackmeter_calc_sample(struct rackmeter *rm, unsigned int index) in rackmeter_calc_sample() argument
318 sample |= ((rm->ubuf[led] >= 0x80) << 15); in rackmeter_calc_sample()
325 struct rackmeter *rm = arg; in rackmeter_irq() local
326 struct rackmeter_dma *db = rm->dma_buf_v; in rackmeter_irq()
334 (void)in_le32(&rm->dma_regs->status); in rackmeter_irq()
345 if (++rm->stale_irq > 3) { in rackmeter_irq()
348 DBDMA_DO_RESET(rm->dma_regs); in rackmeter_irq()
360 buf[i] = rackmeter_calc_sample(rm, i); in rackmeter_irq()
370 struct rackmeter *rm = NULL; in rackmeter_probe() local
399 rm = kzalloc(sizeof(*rm), GFP_KERNEL); in rackmeter_probe()
400 if (rm == NULL) { in rackmeter_probe()
405 rm->mdev = mdev; in rackmeter_probe()
406 rm->i2s = i2s; in rackmeter_probe()
407 mutex_init(&rm->sem); in rackmeter_probe()
408 dev_set_drvdata(&mdev->ofdev.dev, rm); in rackmeter_probe()
426 rm->irq = macio_irq(mdev, 1); in rackmeter_probe()
428 rm->irq = irq_of_parse_and_map(i2s, 1); in rackmeter_probe()
429 if (!rm->irq || in rackmeter_probe()
442 pr_debug(" irq %d\n", rm->irq); in rackmeter_probe()
444 rm->ubuf = (u8 *)__get_free_page(GFP_KERNEL); in rackmeter_probe()
445 if (rm->ubuf == NULL) { in rackmeter_probe()
452 rm->dma_buf_v = dma_alloc_coherent(&macio_get_pci_dev(mdev)->dev, in rackmeter_probe()
454 &rm->dma_buf_p, GFP_KERNEL); in rackmeter_probe()
455 if (rm->dma_buf_v == NULL) { in rackmeter_probe()
462 rm->i2s_regs = ioremap(macio_resource_start(mdev, 0), 0x1000); in rackmeter_probe()
464 rm->i2s_regs = ioremap(ri2s.start, 0x1000); in rackmeter_probe()
466 if (rm->i2s_regs == NULL) { in rackmeter_probe()
473 rm->dma_regs = ioremap(macio_resource_start(mdev, 1), 0x100); in rackmeter_probe()
475 rm->dma_regs = ioremap(rdma.start, 0x100); in rackmeter_probe()
477 if (rm->dma_regs == NULL) { in rackmeter_probe()
484 rc = rackmeter_setup(rm); in rackmeter_probe()
492 rc = request_irq(rm->irq, rackmeter_irq, 0, "rackmeter", rm); in rackmeter_probe()
502 DBDMA_DO_RESET(rm->dma_regs); in rackmeter_probe()
504 iounmap(rm->dma_regs); in rackmeter_probe()
506 iounmap(rm->i2s_regs); in rackmeter_probe()
510 rm->dma_buf_v, rm->dma_buf_p); in rackmeter_probe()
512 free_page((unsigned long)rm->ubuf); in rackmeter_probe()
518 kfree(rm); in rackmeter_probe()
528 struct rackmeter *rm = dev_get_drvdata(&mdev->ofdev.dev); in rackmeter_remove() local
531 rackmeter_stop_cpu_sniffer(rm); in rackmeter_remove()
537 DBDMA_DO_RESET(rm->dma_regs); in rackmeter_remove()
540 free_irq(rm->irq, rm); in rackmeter_remove()
543 iounmap(rm->dma_regs); in rackmeter_remove()
544 iounmap(rm->i2s_regs); in rackmeter_remove()
549 rm->dma_buf_v, rm->dma_buf_p); in rackmeter_remove()
552 free_page((unsigned long)rm->ubuf); in rackmeter_remove()
560 kfree(rm); in rackmeter_remove()
565 struct rackmeter *rm = dev_get_drvdata(&mdev->ofdev.dev); in rackmeter_shutdown() local
567 if (rm == NULL) in rackmeter_shutdown()
571 rackmeter_stop_cpu_sniffer(rm); in rackmeter_shutdown()
574 DBDMA_DO_RESET(rm->dma_regs); in rackmeter_shutdown()