Lines Matching refs:apwm
39 static void rockchip_audio_spk_ctl(struct rk_audio_pwm_dev *apwm, int on) in rockchip_audio_spk_ctl() argument
41 if (apwm->spk_ctl_gpio) in rockchip_audio_spk_ctl()
42 gpiod_direction_output(apwm->spk_ctl_gpio, on); in rockchip_audio_spk_ctl()
45 static void rockchip_audio_pwm_xfer(struct rk_audio_pwm_dev *apwm, int on) in rockchip_audio_pwm_xfer() argument
48 regmap_write(apwm->regmap, AUDPWM_FIFO_CFG, AUDPWM_DMA_EN); in rockchip_audio_pwm_xfer()
49 regmap_write(apwm->regmap, AUDPWM_XFER, AUDPWM_XFER_START); in rockchip_audio_pwm_xfer()
50 rockchip_audio_spk_ctl(apwm, on); in rockchip_audio_pwm_xfer()
52 rockchip_audio_spk_ctl(apwm, on); in rockchip_audio_pwm_xfer()
53 regmap_write(apwm->regmap, AUDPWM_FIFO_CFG, AUDPWM_DMA_DIS); in rockchip_audio_pwm_xfer()
54 regmap_write(apwm->regmap, AUDPWM_XFER, AUDPWM_XFER_STOP); in rockchip_audio_pwm_xfer()
62 struct rk_audio_pwm_dev *apwm = to_info(dai); in rockchip_audio_pwm_hw_params() local
66 rate = params_rate(params) << apwm->sample_width_bits; in rockchip_audio_pwm_hw_params()
67 if (apwm->interpolat_points) { in rockchip_audio_pwm_hw_params()
68 rate *= (apwm->interpolat_points + 1); in rockchip_audio_pwm_hw_params()
69 regmap_write(apwm->regmap, AUDPWM_PWM_CFG, in rockchip_audio_pwm_hw_params()
71 AUDPWM_INTERP_RATE(apwm->interpolat_points)); in rockchip_audio_pwm_hw_params()
75 ret = clk_set_rate(apwm->clk, rate); in rockchip_audio_pwm_hw_params()
79 regmap_write(apwm->regmap, AUDPWM_SRC_CFG, in rockchip_audio_pwm_hw_params()
81 regmap_write(apwm->regmap, AUDPWM_PWM_CFG, in rockchip_audio_pwm_hw_params()
82 AUDPWM_SAMPLE_WIDTH(apwm->sample_width_bits)); in rockchip_audio_pwm_hw_params()
83 regmap_write(apwm->regmap, AUDPWM_FIFO_CFG, in rockchip_audio_pwm_hw_params()
92 struct rk_audio_pwm_dev *apwm = to_info(dai); in rockchip_audio_pwm_trigger() local
100 rockchip_audio_pwm_xfer(apwm, 1); in rockchip_audio_pwm_trigger()
106 rockchip_audio_pwm_xfer(apwm, 0); in rockchip_audio_pwm_trigger()
118 struct rk_audio_pwm_dev *apwm = to_info(dai); in rockchip_audio_pwm_dai_probe() local
120 dai->playback_dma_data = &apwm->playback_dma_data; in rockchip_audio_pwm_dai_probe()
153 struct rk_audio_pwm_dev *apwm = dev_get_drvdata(dev); in rockchip_audio_pwm_runtime_suspend() local
155 regcache_cache_only(apwm->regmap, true); in rockchip_audio_pwm_runtime_suspend()
156 clk_disable_unprepare(apwm->clk); in rockchip_audio_pwm_runtime_suspend()
157 clk_disable_unprepare(apwm->hclk); in rockchip_audio_pwm_runtime_suspend()
164 struct rk_audio_pwm_dev *apwm = dev_get_drvdata(dev); in rockchip_audio_pwm_runtime_resume() local
167 ret = clk_prepare_enable(apwm->clk); in rockchip_audio_pwm_runtime_resume()
171 ret = clk_prepare_enable(apwm->hclk); in rockchip_audio_pwm_runtime_resume()
175 regcache_cache_only(apwm->regmap, false); in rockchip_audio_pwm_runtime_resume()
176 regcache_mark_dirty(apwm->regmap); in rockchip_audio_pwm_runtime_resume()
177 ret = regcache_sync(apwm->regmap); in rockchip_audio_pwm_runtime_resume()
179 clk_disable_unprepare(apwm->clk); in rockchip_audio_pwm_runtime_resume()
180 clk_disable_unprepare(apwm->hclk); in rockchip_audio_pwm_runtime_resume()
258 struct rk_audio_pwm_dev *apwm; in rockchip_audio_pwm_probe() local
264 apwm = devm_kzalloc(&pdev->dev, sizeof(*apwm), GFP_KERNEL); in rockchip_audio_pwm_probe()
265 if (!apwm) in rockchip_audio_pwm_probe()
273 apwm->regmap = devm_regmap_init_mmio(&pdev->dev, regs, in rockchip_audio_pwm_probe()
275 if (IS_ERR(apwm->regmap)) in rockchip_audio_pwm_probe()
276 return PTR_ERR(apwm->regmap); in rockchip_audio_pwm_probe()
278 apwm->playback_dma_data.addr = res->start + AUDPWM_FIFO_ENTRY; in rockchip_audio_pwm_probe()
279 apwm->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; in rockchip_audio_pwm_probe()
280 apwm->playback_dma_data.maxburst = AUDIO_PWM_DMA_BURST_SIZE; in rockchip_audio_pwm_probe()
282 apwm->dev = &pdev->dev; in rockchip_audio_pwm_probe()
283 dev_set_drvdata(&pdev->dev, apwm); in rockchip_audio_pwm_probe()
285 apwm->clk = devm_clk_get(&pdev->dev, "clk"); in rockchip_audio_pwm_probe()
286 if (IS_ERR(apwm->clk)) in rockchip_audio_pwm_probe()
287 return PTR_ERR(apwm->clk); in rockchip_audio_pwm_probe()
289 apwm->hclk = devm_clk_get(&pdev->dev, "hclk"); in rockchip_audio_pwm_probe()
290 if (IS_ERR(apwm->hclk)) in rockchip_audio_pwm_probe()
291 return PTR_ERR(apwm->hclk); in rockchip_audio_pwm_probe()
300 apwm->sample_width_bits = 8; in rockchip_audio_pwm_probe()
303 apwm->sample_width_bits = val; in rockchip_audio_pwm_probe()
306 &apwm->interpolat_points); in rockchip_audio_pwm_probe()
308 apwm->spk_ctl_gpio = devm_gpiod_get_optional(&pdev->dev, "spk-ctl", in rockchip_audio_pwm_probe()
311 if (!apwm->spk_ctl_gpio) { in rockchip_audio_pwm_probe()
313 } else if (IS_ERR(apwm->spk_ctl_gpio)) { in rockchip_audio_pwm_probe()
314 ret = PTR_ERR(apwm->spk_ctl_gpio); in rockchip_audio_pwm_probe()