From 32ae8fdb4ca05c1693e8b62dc27e357848196a6b Mon Sep 17 00:00:00 2001 From: Vishwaroop A Date: Sat, 3 Aug 2024 18:36:13 +0000 Subject: [PATCH] drivers: tach: add support for 1MHZ clock T264 has 1MHz clock for tach. Add support for this clock. Signed-off-by: Vishwaroop A Change-Id: Ic2ecc5dd2494f3b55340f1b925ca616c4844ed6f --- drivers/pwm/pwm-tegra-tachometer.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-tegra-tachometer.c b/drivers/pwm/pwm-tegra-tachometer.c index 86a2d2c3..c184b443 100644 --- a/drivers/pwm/pwm-tegra-tachometer.c +++ b/drivers/pwm/pwm-tegra-tachometer.c @@ -24,6 +24,7 @@ * used as a clock value in the RPM calculations */ #define TACH_COUNTER_CLK 1010526 +#define TACH_COUNTER_CLK_T264 1000000 #define TACH_FAN_TACH0 0x0 #define TACH_FAN_TACH0_PERIOD_MASK 0x7FFFF @@ -80,6 +81,7 @@ struct pwm_tegra_tach_soc_data { bool has_interrupt_support; + bool one_mhz_clock_support; }; struct pwm_tegra_tach { @@ -360,6 +362,7 @@ static int pwm_tegra_tach_probe(struct platform_device *pdev) struct device *hwmon; struct resource *r; int ret; + unsigned long rate; #if defined(NV_PWM_CHIP_STRUCT_HAS_STRUCT_DEVICE) chip = devm_pwmchip_alloc(&pdev->dev, 1, sizeof(*ptt)); @@ -421,7 +424,12 @@ static int pwm_tegra_tach_probe(struct platform_device *pdev) return ret; } - ret = clk_set_rate(ptt->clk, TACH_COUNTER_CLK); + if (ptt->soc_data->one_mhz_clock_support) { + rate = TACH_COUNTER_CLK_T264; + } else { + rate = TACH_COUNTER_CLK; + } + ret = clk_set_rate(ptt->clk, rate); if (ret < 0) { dev_err(&pdev->dev, "Failed to set clock rate %d: %d\n", TACH_COUNTER_CLK, ret); @@ -548,17 +556,25 @@ static const struct dev_pm_ops pwm_tegra_tach_pm_ops = { static struct pwm_tegra_tach_soc_data tegra186_tach_soc_data = { .has_interrupt_support = false, + .one_mhz_clock_support = false, }; static struct pwm_tegra_tach_soc_data tegra194_tach_soc_data = { .has_interrupt_support = false, + .one_mhz_clock_support = false, }; static struct pwm_tegra_tach_soc_data tegra234_tach_soc_data = { .has_interrupt_support = false, + .one_mhz_clock_support = false, }; +static struct pwm_tegra_tach_soc_data tegra264_tach_soc_data = { + .has_interrupt_support = false, + .one_mhz_clock_support = true, +}; static const struct of_device_id pwm_tegra_tach_of_match[] = { + { .compatible = "nvidia,pwm-tegra264-tachometer", .data = &tegra264_tach_soc_data, }, { .compatible = "nvidia,pwm-tegra234-tachometer", .data = &tegra234_tach_soc_data, }, { .compatible = "nvidia,pwm-tegra194-tachometer", .data = &tegra194_tach_soc_data, }, { .compatible = "nvidia,pwm-tegra186-tachometer", .data = &tegra186_tach_soc_data, },