• Home
  • Raw
  • Download

Lines Matching refs:mcbsp

33 static void omap_mcbsp_write(struct omap_mcbsp *mcbsp, u16 reg, u32 val)  in omap_mcbsp_write()  argument
35 void __iomem *addr = mcbsp->io_base + reg * mcbsp->pdata->reg_step; in omap_mcbsp_write()
37 if (mcbsp->pdata->reg_size == 2) { in omap_mcbsp_write()
38 ((u16 *)mcbsp->reg_cache)[reg] = (u16)val; in omap_mcbsp_write()
41 ((u32 *)mcbsp->reg_cache)[reg] = val; in omap_mcbsp_write()
46 static int omap_mcbsp_read(struct omap_mcbsp *mcbsp, u16 reg, bool from_cache) in omap_mcbsp_read() argument
48 void __iomem *addr = mcbsp->io_base + reg * mcbsp->pdata->reg_step; in omap_mcbsp_read()
50 if (mcbsp->pdata->reg_size == 2) { in omap_mcbsp_read()
52 ((u16 *)mcbsp->reg_cache)[reg]; in omap_mcbsp_read()
55 ((u32 *)mcbsp->reg_cache)[reg]; in omap_mcbsp_read()
59 static void omap_mcbsp_st_write(struct omap_mcbsp *mcbsp, u16 reg, u32 val) in omap_mcbsp_st_write() argument
61 writel_relaxed(val, mcbsp->st_data->io_base_st + reg); in omap_mcbsp_st_write()
64 static int omap_mcbsp_st_read(struct omap_mcbsp *mcbsp, u16 reg) in omap_mcbsp_st_read() argument
66 return readl_relaxed(mcbsp->st_data->io_base_st + reg); in omap_mcbsp_st_read()
69 #define MCBSP_READ(mcbsp, reg) \ argument
70 omap_mcbsp_read(mcbsp, OMAP_MCBSP_REG_##reg, 0)
71 #define MCBSP_WRITE(mcbsp, reg, val) \ argument
72 omap_mcbsp_write(mcbsp, OMAP_MCBSP_REG_##reg, val)
73 #define MCBSP_READ_CACHE(mcbsp, reg) \ argument
74 omap_mcbsp_read(mcbsp, OMAP_MCBSP_REG_##reg, 1)
76 #define MCBSP_ST_READ(mcbsp, reg) \ argument
77 omap_mcbsp_st_read(mcbsp, OMAP_ST_REG_##reg)
78 #define MCBSP_ST_WRITE(mcbsp, reg, val) \ argument
79 omap_mcbsp_st_write(mcbsp, OMAP_ST_REG_##reg, val)
81 static void omap_mcbsp_dump_reg(struct omap_mcbsp *mcbsp) in omap_mcbsp_dump_reg() argument
83 dev_dbg(mcbsp->dev, "**** McBSP%d regs ****\n", mcbsp->id); in omap_mcbsp_dump_reg()
84 dev_dbg(mcbsp->dev, "DRR2: 0x%04x\n", in omap_mcbsp_dump_reg()
85 MCBSP_READ(mcbsp, DRR2)); in omap_mcbsp_dump_reg()
86 dev_dbg(mcbsp->dev, "DRR1: 0x%04x\n", in omap_mcbsp_dump_reg()
87 MCBSP_READ(mcbsp, DRR1)); in omap_mcbsp_dump_reg()
88 dev_dbg(mcbsp->dev, "DXR2: 0x%04x\n", in omap_mcbsp_dump_reg()
89 MCBSP_READ(mcbsp, DXR2)); in omap_mcbsp_dump_reg()
90 dev_dbg(mcbsp->dev, "DXR1: 0x%04x\n", in omap_mcbsp_dump_reg()
91 MCBSP_READ(mcbsp, DXR1)); in omap_mcbsp_dump_reg()
92 dev_dbg(mcbsp->dev, "SPCR2: 0x%04x\n", in omap_mcbsp_dump_reg()
93 MCBSP_READ(mcbsp, SPCR2)); in omap_mcbsp_dump_reg()
94 dev_dbg(mcbsp->dev, "SPCR1: 0x%04x\n", in omap_mcbsp_dump_reg()
95 MCBSP_READ(mcbsp, SPCR1)); in omap_mcbsp_dump_reg()
96 dev_dbg(mcbsp->dev, "RCR2: 0x%04x\n", in omap_mcbsp_dump_reg()
97 MCBSP_READ(mcbsp, RCR2)); in omap_mcbsp_dump_reg()
98 dev_dbg(mcbsp->dev, "RCR1: 0x%04x\n", in omap_mcbsp_dump_reg()
99 MCBSP_READ(mcbsp, RCR1)); in omap_mcbsp_dump_reg()
100 dev_dbg(mcbsp->dev, "XCR2: 0x%04x\n", in omap_mcbsp_dump_reg()
101 MCBSP_READ(mcbsp, XCR2)); in omap_mcbsp_dump_reg()
102 dev_dbg(mcbsp->dev, "XCR1: 0x%04x\n", in omap_mcbsp_dump_reg()
103 MCBSP_READ(mcbsp, XCR1)); in omap_mcbsp_dump_reg()
104 dev_dbg(mcbsp->dev, "SRGR2: 0x%04x\n", in omap_mcbsp_dump_reg()
105 MCBSP_READ(mcbsp, SRGR2)); in omap_mcbsp_dump_reg()
106 dev_dbg(mcbsp->dev, "SRGR1: 0x%04x\n", in omap_mcbsp_dump_reg()
107 MCBSP_READ(mcbsp, SRGR1)); in omap_mcbsp_dump_reg()
108 dev_dbg(mcbsp->dev, "PCR0: 0x%04x\n", in omap_mcbsp_dump_reg()
109 MCBSP_READ(mcbsp, PCR0)); in omap_mcbsp_dump_reg()
110 dev_dbg(mcbsp->dev, "***********************\n"); in omap_mcbsp_dump_reg()
115 struct omap_mcbsp *mcbsp = dev_id; in omap_mcbsp_irq_handler() local
118 irqst = MCBSP_READ(mcbsp, IRQST); in omap_mcbsp_irq_handler()
119 dev_dbg(mcbsp->dev, "IRQ callback : 0x%x\n", irqst); in omap_mcbsp_irq_handler()
122 dev_err(mcbsp->dev, "RX Frame Sync Error!\n"); in omap_mcbsp_irq_handler()
124 dev_dbg(mcbsp->dev, "RX Frame Sync\n"); in omap_mcbsp_irq_handler()
126 dev_dbg(mcbsp->dev, "RX End Of Frame\n"); in omap_mcbsp_irq_handler()
128 dev_dbg(mcbsp->dev, "RX Buffer Threshold Reached\n"); in omap_mcbsp_irq_handler()
130 dev_err(mcbsp->dev, "RX Buffer Underflow!\n"); in omap_mcbsp_irq_handler()
132 dev_err(mcbsp->dev, "RX Buffer Overflow!\n"); in omap_mcbsp_irq_handler()
135 dev_err(mcbsp->dev, "TX Frame Sync Error!\n"); in omap_mcbsp_irq_handler()
137 dev_dbg(mcbsp->dev, "TX Frame Sync\n"); in omap_mcbsp_irq_handler()
139 dev_dbg(mcbsp->dev, "TX End Of Frame\n"); in omap_mcbsp_irq_handler()
141 dev_dbg(mcbsp->dev, "TX Buffer threshold Reached\n"); in omap_mcbsp_irq_handler()
143 dev_err(mcbsp->dev, "TX Buffer Underflow!\n"); in omap_mcbsp_irq_handler()
145 dev_err(mcbsp->dev, "TX Buffer Overflow!\n"); in omap_mcbsp_irq_handler()
147 dev_dbg(mcbsp->dev, "TX Buffer empty at end of frame\n"); in omap_mcbsp_irq_handler()
149 MCBSP_WRITE(mcbsp, IRQST, irqst); in omap_mcbsp_irq_handler()
196 void omap_mcbsp_config(struct omap_mcbsp *mcbsp, in omap_mcbsp_config() argument
199 dev_dbg(mcbsp->dev, "Configuring McBSP%d phys_base: 0x%08lx\n", in omap_mcbsp_config()
200 mcbsp->id, mcbsp->phys_base); in omap_mcbsp_config()
203 MCBSP_WRITE(mcbsp, SPCR2, config->spcr2); in omap_mcbsp_config()
204 MCBSP_WRITE(mcbsp, SPCR1, config->spcr1); in omap_mcbsp_config()
205 MCBSP_WRITE(mcbsp, RCR2, config->rcr2); in omap_mcbsp_config()
206 MCBSP_WRITE(mcbsp, RCR1, config->rcr1); in omap_mcbsp_config()
207 MCBSP_WRITE(mcbsp, XCR2, config->xcr2); in omap_mcbsp_config()
208 MCBSP_WRITE(mcbsp, XCR1, config->xcr1); in omap_mcbsp_config()
209 MCBSP_WRITE(mcbsp, SRGR2, config->srgr2); in omap_mcbsp_config()
210 MCBSP_WRITE(mcbsp, SRGR1, config->srgr1); in omap_mcbsp_config()
211 MCBSP_WRITE(mcbsp, MCR2, config->mcr2); in omap_mcbsp_config()
212 MCBSP_WRITE(mcbsp, MCR1, config->mcr1); in omap_mcbsp_config()
213 MCBSP_WRITE(mcbsp, PCR0, config->pcr0); in omap_mcbsp_config()
214 if (mcbsp->pdata->has_ccr) { in omap_mcbsp_config()
215 MCBSP_WRITE(mcbsp, XCCR, config->xccr); in omap_mcbsp_config()
216 MCBSP_WRITE(mcbsp, RCCR, config->rccr); in omap_mcbsp_config()
219 if (mcbsp->pdata->has_wakeup) in omap_mcbsp_config()
220 MCBSP_WRITE(mcbsp, WAKEUPEN, XRDYEN | RRDYEN); in omap_mcbsp_config()
223 if (mcbsp->irq) in omap_mcbsp_config()
224 MCBSP_WRITE(mcbsp, IRQEN, RSYNCERREN | XSYNCERREN); in omap_mcbsp_config()
236 static int omap_mcbsp_dma_reg_params(struct omap_mcbsp *mcbsp, in omap_mcbsp_dma_reg_params() argument
241 if (mcbsp->pdata->reg_size == 2) { in omap_mcbsp_dma_reg_params()
253 return mcbsp->phys_dma_base + data_reg * mcbsp->pdata->reg_step; in omap_mcbsp_dma_reg_params()
256 static void omap_st_on(struct omap_mcbsp *mcbsp) in omap_st_on() argument
260 if (mcbsp->pdata->enable_st_clock) in omap_st_on()
261 mcbsp->pdata->enable_st_clock(mcbsp->id, 1); in omap_st_on()
264 w = MCBSP_READ(mcbsp, SSELCR); in omap_st_on()
265 MCBSP_WRITE(mcbsp, SSELCR, w | SIDETONEEN); in omap_st_on()
268 w = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_on()
269 MCBSP_ST_WRITE(mcbsp, SSELCR, w | ST_SIDETONEEN); in omap_st_on()
272 static void omap_st_off(struct omap_mcbsp *mcbsp) in omap_st_off() argument
276 w = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_off()
277 MCBSP_ST_WRITE(mcbsp, SSELCR, w & ~(ST_SIDETONEEN)); in omap_st_off()
279 w = MCBSP_READ(mcbsp, SSELCR); in omap_st_off()
280 MCBSP_WRITE(mcbsp, SSELCR, w & ~(SIDETONEEN)); in omap_st_off()
282 if (mcbsp->pdata->enable_st_clock) in omap_st_off()
283 mcbsp->pdata->enable_st_clock(mcbsp->id, 0); in omap_st_off()
286 static void omap_st_fir_write(struct omap_mcbsp *mcbsp, s16 *fir) in omap_st_fir_write() argument
290 val = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_fir_write()
293 MCBSP_ST_WRITE(mcbsp, SSELCR, val & ~(ST_COEFFWREN)); in omap_st_fir_write()
295 MCBSP_ST_WRITE(mcbsp, SSELCR, val | ST_COEFFWREN); in omap_st_fir_write()
298 MCBSP_ST_WRITE(mcbsp, SFIRCR, fir[i]); in omap_st_fir_write()
302 val = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_fir_write()
304 val = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_fir_write()
306 MCBSP_ST_WRITE(mcbsp, SSELCR, val & ~(ST_COEFFWREN)); in omap_st_fir_write()
309 dev_err(mcbsp->dev, "McBSP FIR load error!\n"); in omap_st_fir_write()
312 static void omap_st_chgain(struct omap_mcbsp *mcbsp) in omap_st_chgain() argument
315 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_chgain()
317 w = MCBSP_ST_READ(mcbsp, SSELCR); in omap_st_chgain()
319 MCBSP_ST_WRITE(mcbsp, SGAINCR, ST_CH0GAIN(st_data->ch0gain) | \ in omap_st_chgain()
323 int omap_st_set_chgain(struct omap_mcbsp *mcbsp, int channel, s16 chgain) in omap_st_set_chgain() argument
325 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_set_chgain()
331 spin_lock_irq(&mcbsp->lock); in omap_st_set_chgain()
340 omap_st_chgain(mcbsp); in omap_st_set_chgain()
341 spin_unlock_irq(&mcbsp->lock); in omap_st_set_chgain()
346 int omap_st_get_chgain(struct omap_mcbsp *mcbsp, int channel, s16 *chgain) in omap_st_get_chgain() argument
348 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_get_chgain()
354 spin_lock_irq(&mcbsp->lock); in omap_st_get_chgain()
361 spin_unlock_irq(&mcbsp->lock); in omap_st_get_chgain()
366 static int omap_st_start(struct omap_mcbsp *mcbsp) in omap_st_start() argument
368 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_start()
371 omap_st_fir_write(mcbsp, st_data->taps); in omap_st_start()
372 omap_st_chgain(mcbsp); in omap_st_start()
374 if (!mcbsp->free) { in omap_st_start()
375 omap_st_on(mcbsp); in omap_st_start()
383 int omap_st_enable(struct omap_mcbsp *mcbsp) in omap_st_enable() argument
385 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_enable()
390 spin_lock_irq(&mcbsp->lock); in omap_st_enable()
392 omap_st_start(mcbsp); in omap_st_enable()
393 spin_unlock_irq(&mcbsp->lock); in omap_st_enable()
398 static int omap_st_stop(struct omap_mcbsp *mcbsp) in omap_st_stop() argument
400 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_stop()
403 if (!mcbsp->free) { in omap_st_stop()
404 omap_st_off(mcbsp); in omap_st_stop()
412 int omap_st_disable(struct omap_mcbsp *mcbsp) in omap_st_disable() argument
414 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_disable()
420 spin_lock_irq(&mcbsp->lock); in omap_st_disable()
421 omap_st_stop(mcbsp); in omap_st_disable()
423 spin_unlock_irq(&mcbsp->lock); in omap_st_disable()
428 int omap_st_is_enabled(struct omap_mcbsp *mcbsp) in omap_st_is_enabled() argument
430 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in omap_st_is_enabled()
443 void omap_mcbsp_set_tx_threshold(struct omap_mcbsp *mcbsp, u16 threshold) in omap_mcbsp_set_tx_threshold() argument
445 if (mcbsp->pdata->buffer_size == 0) in omap_mcbsp_set_tx_threshold()
448 if (threshold && threshold <= mcbsp->max_tx_thres) in omap_mcbsp_set_tx_threshold()
449 MCBSP_WRITE(mcbsp, THRSH2, threshold - 1); in omap_mcbsp_set_tx_threshold()
457 void omap_mcbsp_set_rx_threshold(struct omap_mcbsp *mcbsp, u16 threshold) in omap_mcbsp_set_rx_threshold() argument
459 if (mcbsp->pdata->buffer_size == 0) in omap_mcbsp_set_rx_threshold()
462 if (threshold && threshold <= mcbsp->max_rx_thres) in omap_mcbsp_set_rx_threshold()
463 MCBSP_WRITE(mcbsp, THRSH1, threshold - 1); in omap_mcbsp_set_rx_threshold()
469 u16 omap_mcbsp_get_tx_delay(struct omap_mcbsp *mcbsp) in omap_mcbsp_get_tx_delay() argument
473 if (mcbsp->pdata->buffer_size == 0) in omap_mcbsp_get_tx_delay()
477 buffstat = MCBSP_READ(mcbsp, XBUFFSTAT); in omap_mcbsp_get_tx_delay()
480 return mcbsp->pdata->buffer_size - buffstat; in omap_mcbsp_get_tx_delay()
487 u16 omap_mcbsp_get_rx_delay(struct omap_mcbsp *mcbsp) in omap_mcbsp_get_rx_delay() argument
491 if (mcbsp->pdata->buffer_size == 0) in omap_mcbsp_get_rx_delay()
495 buffstat = MCBSP_READ(mcbsp, RBUFFSTAT); in omap_mcbsp_get_rx_delay()
497 threshold = MCBSP_READ(mcbsp, THRSH1); in omap_mcbsp_get_rx_delay()
506 int omap_mcbsp_request(struct omap_mcbsp *mcbsp) in omap_mcbsp_request() argument
511 reg_cache = kzalloc(mcbsp->reg_cache_size, GFP_KERNEL); in omap_mcbsp_request()
516 spin_lock(&mcbsp->lock); in omap_mcbsp_request()
517 if (!mcbsp->free) { in omap_mcbsp_request()
518 dev_err(mcbsp->dev, "McBSP%d is currently in use\n", in omap_mcbsp_request()
519 mcbsp->id); in omap_mcbsp_request()
524 mcbsp->free = false; in omap_mcbsp_request()
525 mcbsp->reg_cache = reg_cache; in omap_mcbsp_request()
526 spin_unlock(&mcbsp->lock); in omap_mcbsp_request()
528 if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request) in omap_mcbsp_request()
529 mcbsp->pdata->ops->request(mcbsp->id - 1); in omap_mcbsp_request()
535 MCBSP_WRITE(mcbsp, SPCR1, 0); in omap_mcbsp_request()
536 MCBSP_WRITE(mcbsp, SPCR2, 0); in omap_mcbsp_request()
538 if (mcbsp->irq) { in omap_mcbsp_request()
539 err = request_irq(mcbsp->irq, omap_mcbsp_irq_handler, 0, in omap_mcbsp_request()
540 "McBSP", (void *)mcbsp); in omap_mcbsp_request()
542 dev_err(mcbsp->dev, "Unable to request IRQ\n"); in omap_mcbsp_request()
546 err = request_irq(mcbsp->tx_irq, omap_mcbsp_tx_irq_handler, 0, in omap_mcbsp_request()
547 "McBSP TX", (void *)mcbsp); in omap_mcbsp_request()
549 dev_err(mcbsp->dev, "Unable to request TX IRQ\n"); in omap_mcbsp_request()
553 err = request_irq(mcbsp->rx_irq, omap_mcbsp_rx_irq_handler, 0, in omap_mcbsp_request()
554 "McBSP RX", (void *)mcbsp); in omap_mcbsp_request()
556 dev_err(mcbsp->dev, "Unable to request RX IRQ\n"); in omap_mcbsp_request()
563 free_irq(mcbsp->tx_irq, (void *)mcbsp); in omap_mcbsp_request()
565 if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) in omap_mcbsp_request()
566 mcbsp->pdata->ops->free(mcbsp->id - 1); in omap_mcbsp_request()
569 if (mcbsp->pdata->has_wakeup) in omap_mcbsp_request()
570 MCBSP_WRITE(mcbsp, WAKEUPEN, 0); in omap_mcbsp_request()
572 spin_lock(&mcbsp->lock); in omap_mcbsp_request()
573 mcbsp->free = true; in omap_mcbsp_request()
574 mcbsp->reg_cache = NULL; in omap_mcbsp_request()
576 spin_unlock(&mcbsp->lock); in omap_mcbsp_request()
582 void omap_mcbsp_free(struct omap_mcbsp *mcbsp) in omap_mcbsp_free() argument
586 if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) in omap_mcbsp_free()
587 mcbsp->pdata->ops->free(mcbsp->id - 1); in omap_mcbsp_free()
590 if (mcbsp->pdata->has_wakeup) in omap_mcbsp_free()
591 MCBSP_WRITE(mcbsp, WAKEUPEN, 0); in omap_mcbsp_free()
594 if (mcbsp->irq) in omap_mcbsp_free()
595 MCBSP_WRITE(mcbsp, IRQEN, 0); in omap_mcbsp_free()
597 if (mcbsp->irq) { in omap_mcbsp_free()
598 free_irq(mcbsp->irq, (void *)mcbsp); in omap_mcbsp_free()
600 free_irq(mcbsp->rx_irq, (void *)mcbsp); in omap_mcbsp_free()
601 free_irq(mcbsp->tx_irq, (void *)mcbsp); in omap_mcbsp_free()
604 reg_cache = mcbsp->reg_cache; in omap_mcbsp_free()
614 omap2_mcbsp_set_clks_src(mcbsp, MCBSP_CLKS_PRCM_SRC); in omap_mcbsp_free()
616 spin_lock(&mcbsp->lock); in omap_mcbsp_free()
617 if (mcbsp->free) in omap_mcbsp_free()
618 dev_err(mcbsp->dev, "McBSP%d was not reserved\n", mcbsp->id); in omap_mcbsp_free()
620 mcbsp->free = true; in omap_mcbsp_free()
621 mcbsp->reg_cache = NULL; in omap_mcbsp_free()
622 spin_unlock(&mcbsp->lock); in omap_mcbsp_free()
632 void omap_mcbsp_start(struct omap_mcbsp *mcbsp, int tx, int rx) in omap_mcbsp_start() argument
637 if (mcbsp->st_data) in omap_mcbsp_start()
638 omap_st_start(mcbsp); in omap_mcbsp_start()
641 w = MCBSP_READ_CACHE(mcbsp, PCR0); in omap_mcbsp_start()
643 enable_srg = !((MCBSP_READ_CACHE(mcbsp, SPCR2) | in omap_mcbsp_start()
644 MCBSP_READ_CACHE(mcbsp, SPCR1)) & 1); in omap_mcbsp_start()
648 w = MCBSP_READ_CACHE(mcbsp, SPCR2); in omap_mcbsp_start()
649 MCBSP_WRITE(mcbsp, SPCR2, w | (1 << 6)); in omap_mcbsp_start()
654 w = MCBSP_READ_CACHE(mcbsp, SPCR2); in omap_mcbsp_start()
655 MCBSP_WRITE(mcbsp, SPCR2, w | tx); in omap_mcbsp_start()
658 w = MCBSP_READ_CACHE(mcbsp, SPCR1); in omap_mcbsp_start()
659 MCBSP_WRITE(mcbsp, SPCR1, w | rx); in omap_mcbsp_start()
671 w = MCBSP_READ_CACHE(mcbsp, SPCR2); in omap_mcbsp_start()
672 MCBSP_WRITE(mcbsp, SPCR2, w | (1 << 7)); in omap_mcbsp_start()
675 if (mcbsp->pdata->has_ccr) { in omap_mcbsp_start()
677 w = MCBSP_READ_CACHE(mcbsp, XCCR); in omap_mcbsp_start()
679 MCBSP_WRITE(mcbsp, XCCR, w); in omap_mcbsp_start()
680 w = MCBSP_READ_CACHE(mcbsp, RCCR); in omap_mcbsp_start()
682 MCBSP_WRITE(mcbsp, RCCR, w); in omap_mcbsp_start()
686 omap_mcbsp_dump_reg(mcbsp); in omap_mcbsp_start()
689 void omap_mcbsp_stop(struct omap_mcbsp *mcbsp, int tx, int rx) in omap_mcbsp_stop() argument
696 if (mcbsp->pdata->has_ccr) { in omap_mcbsp_stop()
697 w = MCBSP_READ_CACHE(mcbsp, XCCR); in omap_mcbsp_stop()
699 MCBSP_WRITE(mcbsp, XCCR, w); in omap_mcbsp_stop()
701 w = MCBSP_READ_CACHE(mcbsp, SPCR2); in omap_mcbsp_stop()
702 MCBSP_WRITE(mcbsp, SPCR2, w & ~tx); in omap_mcbsp_stop()
706 if (mcbsp->pdata->has_ccr) { in omap_mcbsp_stop()
707 w = MCBSP_READ_CACHE(mcbsp, RCCR); in omap_mcbsp_stop()
709 MCBSP_WRITE(mcbsp, RCCR, w); in omap_mcbsp_stop()
711 w = MCBSP_READ_CACHE(mcbsp, SPCR1); in omap_mcbsp_stop()
712 MCBSP_WRITE(mcbsp, SPCR1, w & ~rx); in omap_mcbsp_stop()
714 idle = !((MCBSP_READ_CACHE(mcbsp, SPCR2) | in omap_mcbsp_stop()
715 MCBSP_READ_CACHE(mcbsp, SPCR1)) & 1); in omap_mcbsp_stop()
719 w = MCBSP_READ_CACHE(mcbsp, SPCR2); in omap_mcbsp_stop()
720 MCBSP_WRITE(mcbsp, SPCR2, w & ~(1 << 6)); in omap_mcbsp_stop()
723 if (mcbsp->st_data) in omap_mcbsp_stop()
724 omap_st_stop(mcbsp); in omap_mcbsp_stop()
727 int omap2_mcbsp_set_clks_src(struct omap_mcbsp *mcbsp, u8 fck_src_id) in omap2_mcbsp_set_clks_src() argument
740 fck_src = clk_get(mcbsp->dev, src); in omap2_mcbsp_set_clks_src()
742 dev_err(mcbsp->dev, "CLKS: could not clk_get() %s\n", src); in omap2_mcbsp_set_clks_src()
746 pm_runtime_put_sync(mcbsp->dev); in omap2_mcbsp_set_clks_src()
748 r = clk_set_parent(mcbsp->fclk, fck_src); in omap2_mcbsp_set_clks_src()
750 dev_err(mcbsp->dev, "CLKS: could not clk_set_parent() to %s\n", in omap2_mcbsp_set_clks_src()
756 pm_runtime_get_sync(mcbsp->dev); in omap2_mcbsp_set_clks_src()
764 #define max_thres(m) (mcbsp->pdata->buffer_size)
770 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); \
772 return sprintf(buf, "%u\n", mcbsp->prop); \
779 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); \
787 if (!valid_threshold(mcbsp, val)) \
790 mcbsp->prop = val; \
806 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); in dma_op_mode_show() local
811 dma_op_mode = mcbsp->dma_op_mode; in dma_op_mode_show()
828 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); in dma_op_mode_store() local
839 spin_lock_irq(&mcbsp->lock); in dma_op_mode_store()
840 if (!mcbsp->free) { in dma_op_mode_store()
844 mcbsp->dma_op_mode = i; in dma_op_mode_store()
847 spin_unlock_irq(&mcbsp->lock); in dma_op_mode_store()
868 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); in st_taps_show() local
869 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in st_taps_show()
873 spin_lock_irq(&mcbsp->lock); in st_taps_show()
879 spin_unlock_irq(&mcbsp->lock); in st_taps_show()
888 struct omap_mcbsp *mcbsp = dev_get_drvdata(dev); in st_taps_store() local
889 struct omap_mcbsp_st_data *st_data = mcbsp->st_data; in st_taps_store()
892 spin_lock_irq(&mcbsp->lock); in st_taps_store()
916 spin_unlock_irq(&mcbsp->lock); in st_taps_store()
932 static int omap_st_add(struct omap_mcbsp *mcbsp, struct resource *res) in omap_st_add() argument
937 st_data = devm_kzalloc(mcbsp->dev, sizeof(*mcbsp->st_data), GFP_KERNEL); in omap_st_add()
941 st_data->io_base_st = devm_ioremap(mcbsp->dev, res->start, in omap_st_add()
946 err = sysfs_create_group(&mcbsp->dev->kobj, &sidetone_attr_group); in omap_st_add()
950 mcbsp->st_data = st_data; in omap_st_add()
960 struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev); in omap_mcbsp_init() local
964 spin_lock_init(&mcbsp->lock); in omap_mcbsp_init()
965 mcbsp->free = true; in omap_mcbsp_init()
971 mcbsp->io_base = devm_ioremap_resource(&pdev->dev, res); in omap_mcbsp_init()
972 if (IS_ERR(mcbsp->io_base)) in omap_mcbsp_init()
973 return PTR_ERR(mcbsp->io_base); in omap_mcbsp_init()
975 mcbsp->phys_base = res->start; in omap_mcbsp_init()
976 mcbsp->reg_cache_size = resource_size(res); in omap_mcbsp_init()
980 mcbsp->phys_dma_base = mcbsp->phys_base; in omap_mcbsp_init()
982 mcbsp->phys_dma_base = res->start; in omap_mcbsp_init()
991 mcbsp->irq = platform_get_irq_byname(pdev, "common"); in omap_mcbsp_init()
992 if (mcbsp->irq == -ENXIO) { in omap_mcbsp_init()
993 mcbsp->tx_irq = platform_get_irq_byname(pdev, "tx"); in omap_mcbsp_init()
995 if (mcbsp->tx_irq == -ENXIO) { in omap_mcbsp_init()
996 mcbsp->irq = platform_get_irq(pdev, 0); in omap_mcbsp_init()
997 mcbsp->tx_irq = 0; in omap_mcbsp_init()
999 mcbsp->rx_irq = platform_get_irq_byname(pdev, "rx"); in omap_mcbsp_init()
1000 mcbsp->irq = 0; in omap_mcbsp_init()
1010 mcbsp->dma_req[0] = res->start; in omap_mcbsp_init()
1011 mcbsp->dma_data[0].filter_data = &mcbsp->dma_req[0]; in omap_mcbsp_init()
1018 mcbsp->dma_req[1] = res->start; in omap_mcbsp_init()
1019 mcbsp->dma_data[1].filter_data = &mcbsp->dma_req[1]; in omap_mcbsp_init()
1021 mcbsp->dma_data[0].filter_data = "tx"; in omap_mcbsp_init()
1022 mcbsp->dma_data[1].filter_data = "rx"; in omap_mcbsp_init()
1025 mcbsp->dma_data[0].addr = omap_mcbsp_dma_reg_params(mcbsp, 0); in omap_mcbsp_init()
1026 mcbsp->dma_data[0].maxburst = 4; in omap_mcbsp_init()
1028 mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp, 1); in omap_mcbsp_init()
1029 mcbsp->dma_data[1].maxburst = 4; in omap_mcbsp_init()
1031 mcbsp->fclk = clk_get(&pdev->dev, "fck"); in omap_mcbsp_init()
1032 if (IS_ERR(mcbsp->fclk)) { in omap_mcbsp_init()
1033 ret = PTR_ERR(mcbsp->fclk); in omap_mcbsp_init()
1034 dev_err(mcbsp->dev, "unable to get fck: %d\n", ret); in omap_mcbsp_init()
1038 mcbsp->dma_op_mode = MCBSP_DMA_MODE_ELEMENT; in omap_mcbsp_init()
1039 if (mcbsp->pdata->buffer_size) { in omap_mcbsp_init()
1048 mcbsp->max_tx_thres = max_thres(mcbsp) - 0x10; in omap_mcbsp_init()
1049 mcbsp->max_rx_thres = max_thres(mcbsp) - 0x10; in omap_mcbsp_init()
1051 ret = sysfs_create_group(&mcbsp->dev->kobj, in omap_mcbsp_init()
1054 dev_err(mcbsp->dev, in omap_mcbsp_init()
1059 mcbsp->max_tx_thres = -EINVAL; in omap_mcbsp_init()
1060 mcbsp->max_rx_thres = -EINVAL; in omap_mcbsp_init()
1065 ret = omap_st_add(mcbsp, res); in omap_mcbsp_init()
1067 dev_err(mcbsp->dev, in omap_mcbsp_init()
1076 if (mcbsp->pdata->buffer_size) in omap_mcbsp_init()
1077 sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group); in omap_mcbsp_init()
1079 clk_put(mcbsp->fclk); in omap_mcbsp_init()
1083 void omap_mcbsp_sysfs_remove(struct omap_mcbsp *mcbsp) in omap_mcbsp_sysfs_remove() argument
1085 if (mcbsp->pdata->buffer_size) in omap_mcbsp_sysfs_remove()
1086 sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group); in omap_mcbsp_sysfs_remove()
1088 if (mcbsp->st_data) in omap_mcbsp_sysfs_remove()
1089 sysfs_remove_group(&mcbsp->dev->kobj, &sidetone_attr_group); in omap_mcbsp_sysfs_remove()