Lines Matching full:pc
110 struct rockchip_i2s_pwm_chip *pc = to_rockchip_i2s_pwm_chip(chip); in rockchip_i2s_pwm_get_state() local
114 ret = clk_enable(pc->hclk); in rockchip_i2s_pwm_get_state()
118 memcpy(state, &pc->pwm_state, sizeof(struct pwm_state)); in rockchip_i2s_pwm_get_state()
120 ctrl = readl_relaxed(pc->base + I2S_XFER); in rockchip_i2s_pwm_get_state()
126 clk_disable(pc->hclk); in rockchip_i2s_pwm_get_state()
133 struct rockchip_i2s_pwm_chip *pc = to_rockchip_i2s_pwm_chip(chip); in rockchip_i2s_pwm_config() local
140 ret = clk_enable(pc->hclk); in rockchip_i2s_pwm_config()
147 mclk_rate = clk_get_rate(pc->mclk); in rockchip_i2s_pwm_config()
167 div_val = readl_relaxed(pc->base + pc->data->reg_clkdiv); in rockchip_i2s_pwm_config()
168 div_val &= ~pc->data->mask_clkdiv; in rockchip_i2s_pwm_config()
169 writel_relaxed((I2S_CLKDIV_TXM(div_bclk) << pc->data->bit_clkdiv) in rockchip_i2s_pwm_config()
170 | div_val, pc->base + pc->data->reg_clkdiv); in rockchip_i2s_pwm_config()
173 memcpy((u64 *)pc->dma.tx_buff + i, &duty, sizeof(u64)); in rockchip_i2s_pwm_config()
175 pc->pwm_state.period = state->period; in rockchip_i2s_pwm_config()
176 pc->pwm_state.duty_cycle = state->duty_cycle; in rockchip_i2s_pwm_config()
177 pc->pwm_state.polarity = state->polarity; in rockchip_i2s_pwm_config()
180 clk_disable(pc->hclk); in rockchip_i2s_pwm_config()
189 struct rockchip_i2s_pwm_chip *pc = to_rockchip_i2s_pwm_chip(chip); in rockchip_i2s_pwm_enable() local
190 struct rockchip_i2s_pwm_dma *dma = &pc->dma; in rockchip_i2s_pwm_enable()
196 ret = clk_enable(pc->hclk); in rockchip_i2s_pwm_enable()
200 ret = clk_enable(pc->mclk); in rockchip_i2s_pwm_enable()
224 dma_async_issue_pending(pc->dma.chan_tx); in rockchip_i2s_pwm_enable()
226 val = readl_relaxed(pc->base + I2S_DMACR); in rockchip_i2s_pwm_enable()
229 pc->base + I2S_DMACR); in rockchip_i2s_pwm_enable()
231 val = readl_relaxed(pc->base + I2S_XFER); in rockchip_i2s_pwm_enable()
233 writel_relaxed(val | I2S_XFER_TXS_START, pc->base + I2S_XFER); in rockchip_i2s_pwm_enable()
235 dmaengine_terminate_all(pc->dma.chan_tx); in rockchip_i2s_pwm_enable()
237 val = readl_relaxed(pc->base + I2S_DMACR); in rockchip_i2s_pwm_enable()
240 pc->base + I2S_DMACR); in rockchip_i2s_pwm_enable()
242 val = readl_relaxed(pc->base + I2S_XFER); in rockchip_i2s_pwm_enable()
244 writel_relaxed(val | I2S_XFER_TXS_STOP, pc->base + I2S_XFER); in rockchip_i2s_pwm_enable()
248 val = readl_relaxed(pc->base + I2S_CLR); in rockchip_i2s_pwm_enable()
250 writel_relaxed(val | I2S_CLR_TXC, pc->base + I2S_CLR); in rockchip_i2s_pwm_enable()
254 val = readl_relaxed(pc->base + I2S_CLR); in rockchip_i2s_pwm_enable()
262 clk_disable(pc->mclk); in rockchip_i2s_pwm_enable()
263 clk_disable(pc->hclk); in rockchip_i2s_pwm_enable()
269 clk_disable(pc->mclk); in rockchip_i2s_pwm_enable()
271 clk_disable(pc->hclk); in rockchip_i2s_pwm_enable()
307 static int rockchip_i2s_pwm_dma_request(struct rockchip_i2s_pwm_chip *pc, in rockchip_i2s_pwm_dma_request() argument
311 struct rockchip_i2s_pwm_dma *dma = &pc->dma; in rockchip_i2s_pwm_dma_request()
347 static void rockchip_i2s_pwm_dma_release(struct rockchip_i2s_pwm_chip *pc) in rockchip_i2s_pwm_dma_release() argument
349 struct rockchip_i2s_pwm_dma *dma = &pc->dma; in rockchip_i2s_pwm_dma_release()
350 struct device *dev = pc->chip.dev; in rockchip_i2s_pwm_dma_release()
356 static int rockchip_i2s_pwm_hw_params(struct rockchip_i2s_pwm_chip *pc) in rockchip_i2s_pwm_hw_params() argument
361 ret = clk_enable(pc->hclk); in rockchip_i2s_pwm_hw_params()
366 val = readl_relaxed(pc->base + I2S_TXCR); in rockchip_i2s_pwm_hw_params()
369 | I2S_TXCR_FBM_LSB, pc->base + I2S_TXCR); in rockchip_i2s_pwm_hw_params()
371 val = readl_relaxed(pc->base + I2S_CKR); in rockchip_i2s_pwm_hw_params()
373 writel_relaxed(val | I2S_CKR_TSD(I2S_FRAME_BITS), pc->base + I2S_CKR); in rockchip_i2s_pwm_hw_params()
376 val = readl_relaxed(pc->base + I2S_DMACR); in rockchip_i2s_pwm_hw_params()
379 pc->base + I2S_DMACR); in rockchip_i2s_pwm_hw_params()
381 clk_disable(pc->hclk); in rockchip_i2s_pwm_hw_params()
405 struct rockchip_i2s_pwm_chip *pc; in rockchip_i2s_pwm_probe() local
414 pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL); in rockchip_i2s_pwm_probe()
415 if (!pc) in rockchip_i2s_pwm_probe()
419 pc->base = devm_ioremap_resource(&pdev->dev, res); in rockchip_i2s_pwm_probe()
420 if (IS_ERR(pc->base)) in rockchip_i2s_pwm_probe()
421 return PTR_ERR(pc->base); in rockchip_i2s_pwm_probe()
423 pc->hclk = devm_clk_get(&pdev->dev, "hclk"); in rockchip_i2s_pwm_probe()
424 if (IS_ERR(pc->hclk)) in rockchip_i2s_pwm_probe()
425 return PTR_ERR(pc->hclk); in rockchip_i2s_pwm_probe()
427 pc->mclk = devm_clk_get(&pdev->dev, "mclk"); in rockchip_i2s_pwm_probe()
428 if (IS_ERR(pc->mclk)) in rockchip_i2s_pwm_probe()
429 return PTR_ERR(pc->mclk); in rockchip_i2s_pwm_probe()
431 ret = clk_prepare(pc->hclk); in rockchip_i2s_pwm_probe()
435 ret = clk_prepare(pc->mclk); in rockchip_i2s_pwm_probe()
439 pc->chip.dev = &pdev->dev; in rockchip_i2s_pwm_probe()
440 platform_set_drvdata(pdev, pc); in rockchip_i2s_pwm_probe()
442 ret = rockchip_i2s_pwm_hw_params(pc); in rockchip_i2s_pwm_probe()
446 ret = rockchip_i2s_pwm_dma_request(pc, &pdev->dev, in rockchip_i2s_pwm_probe()
453 pc->data = id->data; in rockchip_i2s_pwm_probe()
454 pc->chip.ops = &rockchip_i2s_pwm_ops; in rockchip_i2s_pwm_probe()
455 pc->chip.base = -1; in rockchip_i2s_pwm_probe()
456 pc->chip.npwm = 1; in rockchip_i2s_pwm_probe()
457 pc->chip.of_xlate = of_pwm_xlate_with_flags; in rockchip_i2s_pwm_probe()
458 pc->chip.of_pwm_n_cells = 3; in rockchip_i2s_pwm_probe()
460 ret = pwmchip_add(&pc->chip); in rockchip_i2s_pwm_probe()
463 rockchip_i2s_pwm_dma_release(pc); in rockchip_i2s_pwm_probe()
470 clk_unprepare(pc->mclk); in rockchip_i2s_pwm_probe()
472 clk_unprepare(pc->hclk); in rockchip_i2s_pwm_probe()
479 struct rockchip_i2s_pwm_chip *pc = platform_get_drvdata(pdev); in rockchip_i2s_pwm_remove() local
482 pwm_get_state(pc->chip.pwms, &curstate); in rockchip_i2s_pwm_remove()
484 dmaengine_terminate_all(pc->dma.chan_tx); in rockchip_i2s_pwm_remove()
486 rockchip_i2s_pwm_dma_release(pc); in rockchip_i2s_pwm_remove()
488 clk_unprepare(pc->mclk); in rockchip_i2s_pwm_remove()
489 clk_unprepare(pc->hclk); in rockchip_i2s_pwm_remove()
491 return pwmchip_remove(&pc->chip); in rockchip_i2s_pwm_remove()