Lines Matching +full:salvo +full:- +full:phy

1 // SPDX-License-Identifier: GPL-2.0+
3 * Salvo PHY is a 28nm PHY, it is a legacy PHY, and only
6 * Copyright (c) 2019-2020 NXP
12 #include <linux/phy/phy.h>
18 /* PHY register definition */
105 struct phy *phy; member
114 return (u16)readl(salvo_phy->base + in cdns_salvo_read()
115 reg * (1 << salvo_phy->data->reg_offset_shift)); in cdns_salvo_read()
121 writel(val, salvo_phy->base + in cdns_salvo_write()
122 reg * (1 << salvo_phy->data->reg_offset_shift)); in cdns_salvo_write()
126 * Below bringup sequence pair are from Cadence PHY's User Guide
208 static int cdns_salvo_phy_init(struct phy *phy) in cdns_salvo_phy_init() argument
210 struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy); in cdns_salvo_phy_init()
211 struct cdns_salvo_data *data = salvo_phy->data; in cdns_salvo_phy_init()
215 ret = clk_prepare_enable(salvo_phy->clk); in cdns_salvo_phy_init()
219 for (i = 0; i < data->init_sequence_length; i++) { in cdns_salvo_phy_init()
220 const struct cdns_reg_pairs *reg_pair = data->init_sequence_val + i; in cdns_salvo_phy_init()
222 cdns_salvo_write(salvo_phy, reg_pair->off, reg_pair->val); in cdns_salvo_phy_init()
233 clk_disable_unprepare(salvo_phy->clk); in cdns_salvo_phy_init()
238 static int cdns_salvo_phy_power_on(struct phy *phy) in cdns_salvo_phy_power_on() argument
240 struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy); in cdns_salvo_phy_power_on()
242 return clk_prepare_enable(salvo_phy->clk); in cdns_salvo_phy_power_on()
245 static int cdns_salvo_phy_power_off(struct phy *phy) in cdns_salvo_phy_power_off() argument
247 struct cdns_salvo_phy *salvo_phy = phy_get_drvdata(phy); in cdns_salvo_phy_power_off()
249 clk_disable_unprepare(salvo_phy->clk); in cdns_salvo_phy_power_off()
264 struct device *dev = &pdev->dev; in cdns_salvo_phy_probe()
272 return -EINVAL; in cdns_salvo_phy_probe()
274 data = (struct cdns_salvo_data *)match->data; in cdns_salvo_phy_probe()
277 return -ENOMEM; in cdns_salvo_phy_probe()
279 salvo_phy->data = data; in cdns_salvo_phy_probe()
280 salvo_phy->clk = devm_clk_get_optional(dev, "salvo_phy_clk"); in cdns_salvo_phy_probe()
281 if (IS_ERR(salvo_phy->clk)) in cdns_salvo_phy_probe()
282 return PTR_ERR(salvo_phy->clk); in cdns_salvo_phy_probe()
285 salvo_phy->base = devm_ioremap_resource(dev, res); in cdns_salvo_phy_probe()
286 if (IS_ERR(salvo_phy->base)) in cdns_salvo_phy_probe()
287 return PTR_ERR(salvo_phy->base); in cdns_salvo_phy_probe()
289 salvo_phy->phy = devm_phy_create(dev, NULL, &cdns_salvo_phy_ops); in cdns_salvo_phy_probe()
290 if (IS_ERR(salvo_phy->phy)) in cdns_salvo_phy_probe()
291 return PTR_ERR(salvo_phy->phy); in cdns_salvo_phy_probe()
293 phy_set_drvdata(salvo_phy->phy, salvo_phy); in cdns_salvo_phy_probe()
307 .compatible = "nxp,salvo-phy",
317 .name = "cdns-salvo-phy",
325 MODULE_DESCRIPTION("Cadence SALVO PHY Driver");