Lines Matching +full:freq +full:- +full:table +full:- +full:hz
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2011-2013 Samsung India Software Operations
16 #include "ufshcd-pltfrm.h"
26 struct device *dev = hba->dev; in ufshcd_parse_clock_info()
27 struct device_node *np = dev->of_node; in ufshcd_parse_clock_info()
37 cnt = of_property_count_strings(np, "clock-names"); in ufshcd_parse_clock_info()
38 if (!cnt || (cnt == -EINVAL)) { in ufshcd_parse_clock_info()
50 if (!of_get_property(np, "freq-table-hz", &len)) { in ufshcd_parse_clock_info()
51 dev_info(dev, "freq-table-hz property not specified\n"); in ufshcd_parse_clock_info()
60 dev_err(dev, "%s len mismatch\n", "freq-table-hz"); in ufshcd_parse_clock_info()
61 ret = -EINVAL; in ufshcd_parse_clock_info()
68 ret = -ENOMEM; in ufshcd_parse_clock_info()
72 ret = of_property_read_u32_array(np, "freq-table-hz", in ufshcd_parse_clock_info()
74 if (ret && (ret != -EINVAL)) { in ufshcd_parse_clock_info()
76 "freq-table-hz", ret); in ufshcd_parse_clock_info()
82 "clock-names", i/2, (const char **)&name); in ufshcd_parse_clock_info()
88 ret = -ENOMEM; in ufshcd_parse_clock_info()
92 clki->min_freq = clkfreq[i]; in ufshcd_parse_clock_info()
93 clki->max_freq = clkfreq[i+1]; in ufshcd_parse_clock_info()
94 clki->name = devm_kstrdup(dev, name, GFP_KERNEL); in ufshcd_parse_clock_info()
95 if (!clki->name) { in ufshcd_parse_clock_info()
96 ret = -ENOMEM; in ufshcd_parse_clock_info()
101 clki->keep_link_active = true; in ufshcd_parse_clock_info()
102 dev_dbg(dev, "%s: min %u max %u name %s\n", "freq-table-hz", in ufshcd_parse_clock_info()
103 clki->min_freq, clki->max_freq, clki->name); in ufshcd_parse_clock_info()
104 list_add_tail(&clki->list, &hba->clk_list_head); in ufshcd_parse_clock_info()
128 struct device_node *np = dev->of_node; in ufshcd_populate_vreg()
135 snprintf(prop_name, MAX_PROP_SIZE, "%s-supply", name); in ufshcd_populate_vreg()
144 return -ENOMEM; in ufshcd_populate_vreg()
146 vreg->name = devm_kstrdup(dev, name, GFP_KERNEL); in ufshcd_populate_vreg()
147 if (!vreg->name) in ufshcd_populate_vreg()
148 return -ENOMEM; in ufshcd_populate_vreg()
150 snprintf(prop_name, MAX_PROP_SIZE, "%s-max-microamp", name); in ufshcd_populate_vreg()
151 if (of_property_read_u32(np, prop_name, &vreg->max_uA)) { in ufshcd_populate_vreg()
153 vreg->max_uA = 0; in ufshcd_populate_vreg()
162 * ufshcd_parse_regulator_info - get regulator info from device tree
166 * If any of the supplies are not defined it is assumed that they are always-on
173 struct device *dev = hba->dev; in ufshcd_parse_regulator_info()
174 struct ufs_vreg_info *info = &hba->vreg_info; in ufshcd_parse_regulator_info()
176 err = ufshcd_populate_vreg(dev, "vdd-hba", &info->vdd_hba); in ufshcd_parse_regulator_info()
180 err = ufshcd_populate_vreg(dev, "vcc", &info->vcc); in ufshcd_parse_regulator_info()
184 err = ufshcd_populate_vreg(dev, "vccq", &info->vccq); in ufshcd_parse_regulator_info()
188 err = ufshcd_populate_vreg(dev, "vccq2", &info->vccq2); in ufshcd_parse_regulator_info()
195 * ufshcd_pltfrm_suspend - suspend power management function
199 * Returns non-zero otherwise
208 * ufshcd_pltfrm_resume - resume power management function
212 * Returns non-zero otherwise
248 struct device *dev = hba->dev; in ufshcd_init_lanes_per_dir()
251 ret = of_property_read_u32(dev->of_node, "lanes-per-direction", in ufshcd_init_lanes_per_dir()
252 &hba->lanes_per_direction); in ufshcd_init_lanes_per_dir()
254 dev_dbg(hba->dev, in ufshcd_init_lanes_per_dir()
255 "%s: failed to read lanes-per-direction, ret=%d\n", in ufshcd_init_lanes_per_dir()
257 hba->lanes_per_direction = UFSHCD_DEFAULT_LANES_PER_DIRECTION; in ufshcd_init_lanes_per_dir()
262 * ufshcd_get_pwr_dev_param - get finally agreed attributes for
268 * Returns 0 on success, non-zero value on failure
279 if (dev_max->pwr_rx == FAST_MODE) in ufshcd_get_pwr_dev_param()
282 if (pltfrm_param->desired_working_mode == UFS_HS_MODE) { in ufshcd_get_pwr_dev_param()
284 min_pltfrm_gear = min_t(u32, pltfrm_param->hs_rx_gear, in ufshcd_get_pwr_dev_param()
285 pltfrm_param->hs_tx_gear); in ufshcd_get_pwr_dev_param()
287 min_pltfrm_gear = min_t(u32, pltfrm_param->pwm_rx_gear, in ufshcd_get_pwr_dev_param()
288 pltfrm_param->pwm_tx_gear); in ufshcd_get_pwr_dev_param()
293 * pltfrm_param->desired_working_mode is HS, in ufshcd_get_pwr_dev_param()
299 return -ENOTSUPP; in ufshcd_get_pwr_dev_param()
303 * since pltfrm_param->desired_working_mode is also HS in ufshcd_get_pwr_dev_param()
307 agreed_pwr->pwr_rx = pltfrm_param->rx_pwr_hs; in ufshcd_get_pwr_dev_param()
308 agreed_pwr->pwr_tx = agreed_pwr->pwr_rx; in ufshcd_get_pwr_dev_param()
311 * here pltfrm_param->desired_working_mode is PWM. in ufshcd_get_pwr_dev_param()
313 * in both cases pltfrm_param->desired_working_mode will in ufshcd_get_pwr_dev_param()
316 agreed_pwr->pwr_rx = pltfrm_param->rx_pwr_pwm; in ufshcd_get_pwr_dev_param()
317 agreed_pwr->pwr_tx = agreed_pwr->pwr_rx; in ufshcd_get_pwr_dev_param()
325 agreed_pwr->lane_tx = min_t(u32, dev_max->lane_tx, in ufshcd_get_pwr_dev_param()
326 pltfrm_param->tx_lanes); in ufshcd_get_pwr_dev_param()
327 agreed_pwr->lane_rx = min_t(u32, dev_max->lane_rx, in ufshcd_get_pwr_dev_param()
328 pltfrm_param->rx_lanes); in ufshcd_get_pwr_dev_param()
331 min_dev_gear = min_t(u32, dev_max->gear_rx, dev_max->gear_tx); in ufshcd_get_pwr_dev_param()
334 * if both device capabilities and vendor pre-defined preferences are in ufshcd_get_pwr_dev_param()
343 agreed_pwr->gear_rx = in ufshcd_get_pwr_dev_param()
346 agreed_pwr->gear_rx = min_dev_gear; in ufshcd_get_pwr_dev_param()
348 agreed_pwr->gear_rx = min_pltfrm_gear; in ufshcd_get_pwr_dev_param()
350 agreed_pwr->gear_tx = agreed_pwr->gear_rx; in ufshcd_get_pwr_dev_param()
352 agreed_pwr->hs_rate = pltfrm_param->hs_rate; in ufshcd_get_pwr_dev_param()
359 * ufshcd_pltfrm_init - probe routine of the driver
363 * Returns 0 on success, non-zero value on failure
371 struct device *dev = &pdev->dev; in ufshcd_pltfrm_init()
387 dev_err(&pdev->dev, "Allocation failed\n"); in ufshcd_pltfrm_init()
391 hba->vops = vops; in ufshcd_pltfrm_init()
395 dev_err(&pdev->dev, "%s: clock parse failed %d\n", in ufshcd_pltfrm_init()
401 dev_err(&pdev->dev, "%s: regulator init failed %d\n", in ufshcd_pltfrm_init()
414 pm_runtime_set_active(&pdev->dev); in ufshcd_pltfrm_init()
415 pm_runtime_enable(&pdev->dev); in ufshcd_pltfrm_init()