Lines Matching refs:tpm
94 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_round_state() local
98 rate = clk_get_rate(tpm->clk); in pwm_imx_tpm_round_state()
141 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_get_state() local
146 state->period = tpm->real_period; in pwm_imx_tpm_get_state()
149 rate = clk_get_rate(tpm->clk); in pwm_imx_tpm_get_state()
150 val = readl(tpm->base + PWM_IMX_TPM_SC); in pwm_imx_tpm_get_state()
152 tmp = readl(tpm->base + PWM_IMX_TPM_CnV(pwm->hwpwm)); in pwm_imx_tpm_get_state()
157 val = readl(tpm->base + PWM_IMX_TPM_CnSC(pwm->hwpwm)); in pwm_imx_tpm_get_state()
177 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_apply_hw() local
184 if (state->period != tpm->real_period) { in pwm_imx_tpm_apply_hw()
191 if (tpm->user_count > 1) in pwm_imx_tpm_apply_hw()
194 val = readl(tpm->base + PWM_IMX_TPM_SC); in pwm_imx_tpm_apply_hw()
203 writel(val, tpm->base + PWM_IMX_TPM_SC); in pwm_imx_tpm_apply_hw()
213 writel(p->mod, tpm->base + PWM_IMX_TPM_MOD); in pwm_imx_tpm_apply_hw()
214 tpm->real_period = state->period; in pwm_imx_tpm_apply_hw()
233 writel(p->val, tpm->base + PWM_IMX_TPM_CnV(pwm->hwpwm)); in pwm_imx_tpm_apply_hw()
239 timeout = jiffies + msecs_to_jiffies(tpm->real_period / in pwm_imx_tpm_apply_hw()
241 while (readl(tpm->base + PWM_IMX_TPM_MOD) != p->mod in pwm_imx_tpm_apply_hw()
242 || readl(tpm->base + PWM_IMX_TPM_CnV(pwm->hwpwm)) in pwm_imx_tpm_apply_hw()
256 val = readl(tpm->base + PWM_IMX_TPM_CnSC(pwm->hwpwm)); in pwm_imx_tpm_apply_hw()
272 writel(val, tpm->base + PWM_IMX_TPM_CnSC(pwm->hwpwm)); in pwm_imx_tpm_apply_hw()
276 val = readl(tpm->base + PWM_IMX_TPM_SC); in pwm_imx_tpm_apply_hw()
278 if (++tpm->enable_count == 1) in pwm_imx_tpm_apply_hw()
281 if (--tpm->enable_count == 0) in pwm_imx_tpm_apply_hw()
284 writel(val, tpm->base + PWM_IMX_TPM_SC); in pwm_imx_tpm_apply_hw()
294 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_apply() local
303 mutex_lock(&tpm->lock); in pwm_imx_tpm_apply()
305 mutex_unlock(&tpm->lock); in pwm_imx_tpm_apply()
312 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_request() local
314 mutex_lock(&tpm->lock); in pwm_imx_tpm_request()
315 tpm->user_count++; in pwm_imx_tpm_request()
316 mutex_unlock(&tpm->lock); in pwm_imx_tpm_request()
323 struct imx_tpm_pwm_chip *tpm = to_imx_tpm_pwm_chip(chip); in pwm_imx_tpm_free() local
325 mutex_lock(&tpm->lock); in pwm_imx_tpm_free()
326 tpm->user_count--; in pwm_imx_tpm_free()
327 mutex_unlock(&tpm->lock); in pwm_imx_tpm_free()
340 struct imx_tpm_pwm_chip *tpm; in pwm_imx_tpm_probe() local
344 tpm = devm_kzalloc(&pdev->dev, sizeof(*tpm), GFP_KERNEL); in pwm_imx_tpm_probe()
345 if (!tpm) in pwm_imx_tpm_probe()
348 platform_set_drvdata(pdev, tpm); in pwm_imx_tpm_probe()
350 tpm->base = devm_platform_ioremap_resource(pdev, 0); in pwm_imx_tpm_probe()
351 if (IS_ERR(tpm->base)) in pwm_imx_tpm_probe()
352 return PTR_ERR(tpm->base); in pwm_imx_tpm_probe()
354 tpm->clk = devm_clk_get(&pdev->dev, NULL); in pwm_imx_tpm_probe()
355 if (IS_ERR(tpm->clk)) { in pwm_imx_tpm_probe()
356 ret = PTR_ERR(tpm->clk); in pwm_imx_tpm_probe()
363 ret = clk_prepare_enable(tpm->clk); in pwm_imx_tpm_probe()
370 tpm->chip.dev = &pdev->dev; in pwm_imx_tpm_probe()
371 tpm->chip.ops = &imx_tpm_pwm_ops; in pwm_imx_tpm_probe()
372 tpm->chip.base = -1; in pwm_imx_tpm_probe()
373 tpm->chip.of_xlate = of_pwm_xlate_with_flags; in pwm_imx_tpm_probe()
374 tpm->chip.of_pwm_n_cells = 3; in pwm_imx_tpm_probe()
377 val = readl(tpm->base + PWM_IMX_TPM_PARAM); in pwm_imx_tpm_probe()
378 tpm->chip.npwm = FIELD_GET(PWM_IMX_TPM_PARAM_CHAN, val); in pwm_imx_tpm_probe()
380 mutex_init(&tpm->lock); in pwm_imx_tpm_probe()
382 ret = pwmchip_add(&tpm->chip); in pwm_imx_tpm_probe()
385 clk_disable_unprepare(tpm->clk); in pwm_imx_tpm_probe()
393 struct imx_tpm_pwm_chip *tpm = platform_get_drvdata(pdev); in pwm_imx_tpm_remove() local
394 int ret = pwmchip_remove(&tpm->chip); in pwm_imx_tpm_remove()
396 clk_disable_unprepare(tpm->clk); in pwm_imx_tpm_remove()
403 struct imx_tpm_pwm_chip *tpm = dev_get_drvdata(dev); in pwm_imx_tpm_suspend() local
405 if (tpm->enable_count > 0) in pwm_imx_tpm_suspend()
408 clk_disable_unprepare(tpm->clk); in pwm_imx_tpm_suspend()
415 struct imx_tpm_pwm_chip *tpm = dev_get_drvdata(dev); in pwm_imx_tpm_resume() local
418 ret = clk_prepare_enable(tpm->clk); in pwm_imx_tpm_resume()