Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1366128
| From | Wei Ni <wni@nvidia.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH V9 RESEND 11/14] thermal: tegra: handle HW initialization in one funcotion |
| Date | 2016-03-29 12:40 +0200 |
| Message-ID | <rhZe2-4MC-29@gated-at.bofh.it> (permalink) |
| References | <rhZ4m-4HB-9@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Handle HW initialization in one function soctherm_init(),
so that the codes are more clear.
Signed-off-by: Wei Ni <wni@nvidia.com>
---
drivers/thermal/tegra/soctherm.c | 85 +++++++++++++++++++++-------------------
1 file changed, 44 insertions(+), 41 deletions(-)
diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c
index deeb3b7e4dac..d2b7c255d71f 100644
--- a/drivers/thermal/tegra/soctherm.c
+++ b/drivers/thermal/tegra/soctherm.c
@@ -95,19 +95,11 @@ struct tegra_soctherm {
struct dentry *debugfs_dir;
};
-static int enable_tsensor(struct tegra_soctherm *tegra,
- unsigned int i,
- const struct tsensor_shared_calib *shared)
+static void enable_tsensor(struct tegra_soctherm *tegra, unsigned int i)
{
const struct tegra_tsensor *sensor = &tegra->soc->tsensors[i];
void __iomem *base = tegra->regs + sensor->base;
- u32 *calib = &tegra->calib[i];
unsigned int val;
- int err;
-
- err = tegra_calc_tsensor_calib(sensor, shared, calib);
- if (err)
- return err;
val = sensor->config->tall << SENSOR_CONFIG0_TALL_SHIFT;
writel(val, base + SENSOR_CONFIG0);
@@ -118,9 +110,7 @@ static int enable_tsensor(struct tegra_soctherm *tegra,
val |= SENSOR_CONFIG1_TEMP_ENABLE;
writel(val, base + SENSOR_CONFIG1);
- writel(*calib, base + SENSOR_CONFIG2);
-
- return 0;
+ writel(tegra->calib[i], base + SENSOR_CONFIG2);
}
/*
@@ -461,6 +451,34 @@ static int soctherm_clk_enable(struct platform_device *pdev, bool enable)
return 0;
}
+static void soctherm_init(struct platform_device *pdev)
+{
+ struct tegra_soctherm *tegra = platform_get_drvdata(pdev);
+ const struct tegra_tsensor_group **ttgs = tegra->soc->ttgs;
+ int i;
+ u32 pdiv, hotspot;
+
+ /* Initialize raw sensors */
+ for (i = 0; i < tegra->soc->num_tsensors; ++i)
+ enable_tsensor(tegra, i);
+
+ /* program pdiv and hotspot offsets per THERM */
+ pdiv = readl(tegra->regs + SENSOR_PDIV);
+ hotspot = readl(tegra->regs + SENSOR_HOTSPOT_OFF);
+ for (i = 0; i < tegra->soc->num_ttgs; ++i) {
+ pdiv = REG_SET_MASK(pdiv, ttgs[i]->pdiv_mask,
+ ttgs[i]->pdiv);
+ /* hotspot offset from PLLX, doesn't need to configure PLLX */
+ if (ttgs[i]->id == TEGRA124_SOCTHERM_SENSOR_PLLX)
+ continue;
+ hotspot = REG_SET_MASK(hotspot,
+ ttgs[i]->pllx_hotspot_mask,
+ ttgs[i]->pllx_hotspot_diff);
+ }
+ writel(pdiv, tegra->regs + SENSOR_PDIV);
+ writel(hotspot, tegra->regs + SENSOR_HOTSPOT_OFF);
+}
+
static const struct of_device_id tegra_soctherm_of_match[] = {
#ifdef CONFIG_ARCH_TEGRA_124_SOC
{
@@ -488,7 +506,6 @@ static int tegra_soctherm_probe(struct platform_device *pdev)
struct tegra_soctherm_soc *soc;
unsigned int i;
int err;
- u32 pdiv, hotspot;
match = of_match_node(tegra_soctherm_of_match, pdev->dev.of_node);
if (!match)
@@ -529,45 +546,31 @@ static int tegra_soctherm_probe(struct platform_device *pdev)
return PTR_ERR(tegra->clock_soctherm);
}
- err = soctherm_clk_enable(pdev, true);
- if (err)
- return err;
-
- /* Initialize raw sensors */
-
tegra->calib = devm_kzalloc(&pdev->dev,
sizeof(u32) * soc->num_tsensors,
GFP_KERNEL);
- if (!tegra->calib) {
- err = -ENOMEM;
- goto disable_clocks;
- }
+ if (!tegra->calib)
+ return -ENOMEM;
+ /* calculate shared calibration data */
err = tegra_calc_shared_calib(soc->tfuse, &shared_calib);
if (err)
- goto disable_clocks;
+ return err;
+ /* calculate tsensor calibaration data */
for (i = 0; i < soc->num_tsensors; ++i) {
- err = enable_tsensor(tegra, i, &shared_calib);
+ err = tegra_calc_tsensor_calib(&soc->tsensors[i],
+ &shared_calib,
+ &tegra->calib[i]);
if (err)
- goto disable_clocks;
+ return err;
}
- /* Program pdiv and hotspot offsets per THERM */
- pdiv = readl(tegra->regs + SENSOR_PDIV);
- hotspot = readl(tegra->regs + SENSOR_HOTSPOT_OFF);
- for (i = 0; i < soc->num_ttgs; ++i) {
- pdiv = REG_SET_MASK(pdiv, soc->ttgs[i]->pdiv_mask,
- soc->ttgs[i]->pdiv);
- /* hotspot offset from PLLX, doesn't need to configure PLLX */
- if (soc->ttgs[i]->id == TEGRA124_SOCTHERM_SENSOR_PLLX)
- continue;
- hotspot = REG_SET_MASK(hotspot,
- soc->ttgs[i]->pllx_hotspot_mask,
- soc->ttgs[i]->pllx_hotspot_diff);
- }
- writel(pdiv, tegra->regs + SENSOR_PDIV);
- writel(hotspot, tegra->regs + SENSOR_HOTSPOT_OFF);
+ err = soctherm_clk_enable(pdev, true);
+ if (err)
+ return err;
+
+ soctherm_init(pdev);
for (i = 0; i < soc->num_ttgs; ++i) {
struct tegra_thermctl_zone *zone =
--
1.9.1
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH V9 RESEND 00/14] Add T210 support in Tegra soctherm Wei Ni <wni@nvidia.com> - 2016-03-29 12:30 +0200
[PATCH V9 RESEND 06/14] thermal: tegra: add a debugfs to show registers Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
Re: [PATCH V9 RESEND 00/14] Add T210 support in Tegra soctherm Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
Re: [PATCH V9 RESEND 00/14] Add T210 support in Tegra soctherm Eduardo Valentin <edubezval@gmail.com> - 2016-03-29 17:20 +0200
[PATCH V9 RESEND 03/14] thermal: tegra: get rid of PDIV/HOTSPOT hack Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 13/14] arm64: tegra: add soctherm node for Tegra210 Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
Re: [PATCH V9 RESEND 13/14] arm64: tegra: add soctherm node for Tegra210 Eduardo Valentin <edubezval@gmail.com> - 2016-03-29 17:20 +0200
Re: [PATCH V9 RESEND 13/14] arm64: tegra: add soctherm node for Tegra210 Wei Ni <wni@nvidia.com> - 2016-03-30 05:30 +0200
Re: [PATCH V9 RESEND 13/14] arm64: tegra: add soctherm node for Tegra210 Wei Ni <wni@nvidia.com> - 2016-03-30 12:30 +0200
Re: [PATCH V9 RESEND 13/14] arm64: tegra: add soctherm node for Tegra210 Wei Ni <wni@nvidia.com> - 2016-04-01 09:10 +0200
[PATCH V9 RESEND 02/14] thermal: tegra: combine sensor group-related data Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 11/14] thermal: tegra: handle HW initialization in one funcotion Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 07/14] thermal: of-thermal: allow setting trip_temp on hardware Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 01/14] thermal: tegra: move tegra thermal files into tegra directory Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 05/14] thermal: tegra: add Tegra210 specific SOC_THERM driver Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 09/14] thermal: tegra: add thermtrip function Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 10/14] thermal: tegra: handle clocks in one function Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 14/14] arm: tegra: set critical trips for Tegra124 Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
Re: [PATCH V9 RESEND 14/14] arm: tegra: set critical trips for Tegra124 Eduardo Valentin <edubezval@gmail.com> - 2016-03-29 17:20 +0200
Re: [PATCH V9 RESEND 14/14] arm: tegra: set critical trips for Tegra124 Wei Ni <wni@nvidia.com> - 2016-04-01 09:10 +0200
Re: [PATCH V9 RESEND 14/14] arm: tegra: set critical trips for Tegra124 Wei Ni <wni@nvidia.com> - 2016-03-30 12:40 +0200
[PATCH V9 RESEND 12/14] thermal: tegra: add PM support Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
[PATCH V9 RESEND 08/14] of: add notes of critical trips for soctherm Wei Ni <wni@nvidia.com> - 2016-03-29 12:40 +0200
Re: [PATCH V9 RESEND 00/14] Add T210 support in Tegra soctherm Eduardo Valentin <edubezval@gmail.com> - 2016-03-29 17:20 +0200
csiph-web