OSDN Git Service

phy: miphy28lp: Add missing .owner field in miphy28lp_ops
[uclinux-h8/linux.git] / drivers / phy / phy-miphy28lp.c
index 27fa62c..4fe1755 100644 (file)
 #define MIPHY_SATA_BANK_NB     3
 #define MIPHY_PCIE_BANK_NB     2
 
+enum {
+       SYSCFG_CTRL,
+       SYSCFG_STATUS,
+       SYSCFG_PCI,
+       SYSCFG_SATA,
+       SYSCFG_REG_MAX,
+};
+
 struct miphy28lp_phy {
        struct phy *phy;
        struct miphy28lp_dev *phydev;
@@ -211,10 +219,7 @@ struct miphy28lp_phy {
        u32 sata_gen;
 
        /* Sysconfig registers offsets needed to configure the device */
-       u32 syscfg_miphy_ctrl;
-       u32 syscfg_miphy_status;
-       u32 syscfg_pci;
-       u32 syscfg_sata;
+       u32 syscfg_reg[SYSCFG_REG_MAX];
        u8 type;
 };
 
@@ -223,6 +228,7 @@ struct miphy28lp_dev {
        struct regmap *regmap;
        struct mutex miphy_mutex;
        struct miphy28lp_phy **phys;
+       int nphys;
 };
 
 struct miphy_initval {
@@ -834,12 +840,12 @@ static int miphy_osc_is_ready(struct miphy28lp_phy *miphy_phy)
        if (!miphy_phy->osc_rdy)
                return 0;
 
-       if (!miphy_phy->syscfg_miphy_status)
+       if (!miphy_phy->syscfg_reg[SYSCFG_STATUS])
                return -EINVAL;
 
        do {
-               regmap_read(miphy_dev->regmap, miphy_phy->syscfg_miphy_status,
-                           &val);
+               regmap_read(miphy_dev->regmap,
+                               miphy_phy->syscfg_reg[SYSCFG_STATUS], &val);
 
                if ((val & MIPHY_OSC_RDY) != MIPHY_OSC_RDY)
                        cpu_relax();
@@ -888,7 +894,7 @@ static int miphy28lp_setup(struct miphy28lp_phy *miphy_phy, u32 miphy_val)
        int err;
        struct miphy28lp_dev *miphy_dev = miphy_phy->phydev;
 
-       if (!miphy_phy->syscfg_miphy_ctrl)
+       if (!miphy_phy->syscfg_reg[SYSCFG_CTRL])
                return -EINVAL;
 
        err = reset_control_assert(miphy_phy->miphy_rst);
@@ -900,7 +906,8 @@ static int miphy28lp_setup(struct miphy28lp_phy *miphy_phy, u32 miphy_val)
        if (miphy_phy->osc_force_ext)
                miphy_val |= MIPHY_OSC_FORCE_EXT;
 
-       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_miphy_ctrl,
+       regmap_update_bits(miphy_dev->regmap,
+                          miphy_phy->syscfg_reg[SYSCFG_CTRL],
                           MIPHY_CTRL_MASK, miphy_val);
 
        err = reset_control_deassert(miphy_phy->miphy_rst);
@@ -917,8 +924,9 @@ static int miphy28lp_init_sata(struct miphy28lp_phy *miphy_phy)
        struct miphy28lp_dev *miphy_dev = miphy_phy->phydev;
        int err, sata_conf = SATA_CTRL_SELECT_SATA;
 
-       if ((!miphy_phy->syscfg_sata) || (!miphy_phy->syscfg_pci)
-               || (!miphy_phy->base))
+       if ((!miphy_phy->syscfg_reg[SYSCFG_SATA]) ||
+                       (!miphy_phy->syscfg_reg[SYSCFG_PCI]) ||
+                       (!miphy_phy->base))
                return -EINVAL;
 
        dev_info(miphy_dev->dev, "sata-up mode, addr 0x%p\n", miphy_phy->base);
@@ -926,10 +934,11 @@ static int miphy28lp_init_sata(struct miphy28lp_phy *miphy_phy)
        /* Configure the glue-logic */
        sata_conf |= ((miphy_phy->sata_gen - SATA_GEN1) << SATA_SPDMODE);
 
-       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_sata,
+       regmap_update_bits(miphy_dev->regmap,
+                          miphy_phy->syscfg_reg[SYSCFG_SATA],
                           SATA_CTRL_MASK, sata_conf);
 
-       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_pci,
+       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_reg[SYSCFG_PCI],
                           PCIE_CTRL_MASK, SATA_CTRL_SELECT_PCIE);
 
        /* MiPHY path and clocking init */
@@ -951,17 +960,19 @@ static int miphy28lp_init_pcie(struct miphy28lp_phy *miphy_phy)
        struct miphy28lp_dev *miphy_dev = miphy_phy->phydev;
        int err;
 
-       if ((!miphy_phy->syscfg_sata) || (!miphy_phy->syscfg_pci)
+       if ((!miphy_phy->syscfg_reg[SYSCFG_SATA]) ||
+                       (!miphy_phy->syscfg_reg[SYSCFG_PCI])
                || (!miphy_phy->base) || (!miphy_phy->pipebase))
                return -EINVAL;
 
        dev_info(miphy_dev->dev, "pcie-up mode, addr 0x%p\n", miphy_phy->base);
 
        /* Configure the glue-logic */
-       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_sata,
+       regmap_update_bits(miphy_dev->regmap,
+                          miphy_phy->syscfg_reg[SYSCFG_SATA],
                           SATA_CTRL_MASK, SATA_CTRL_SELECT_PCIE);
 
-       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_pci,
+       regmap_update_bits(miphy_dev->regmap, miphy_phy->syscfg_reg[SYSCFG_PCI],
                           PCIE_CTRL_MASK, SYSCFG_PCIE_PCIE_VAL);
 
        /* MiPHY path and clocking init */
@@ -1106,7 +1117,7 @@ static struct phy *miphy28lp_xlate(struct device *dev,
                return ERR_PTR(-EINVAL);
        }
 
-       for (index = 0; index < of_get_child_count(dev->of_node); index++)
+       for (index = 0; index < miphy_dev->nphys; index++)
                if (phynode == miphy_dev->phys[index]->phy->dev.of_node) {
                        miphy_phy = miphy_dev->phys[index];
                        break;
@@ -1128,6 +1139,7 @@ static struct phy *miphy28lp_xlate(struct device *dev,
 
 static struct phy_ops miphy28lp_ops = {
        .init = miphy28lp_init,
+       .owner = THIS_MODULE,
 };
 
 static int miphy28lp_probe_resets(struct device_node *node,
@@ -1156,7 +1168,8 @@ static int miphy28lp_probe_resets(struct device_node *node,
 static int miphy28lp_of_probe(struct device_node *np,
                              struct miphy28lp_phy *miphy_phy)
 {
-       struct resource res;
+       int i;
+       u32 ctrlreg;
 
        miphy_phy->osc_force_ext =
                of_property_read_bool(np, "st,osc-force-ext");
@@ -1175,18 +1188,10 @@ static int miphy28lp_of_probe(struct device_node *np,
        if (!miphy_phy->sata_gen)
                miphy_phy->sata_gen = SATA_GEN1;
 
-       if (!miphy28lp_get_resource_byname(np, "miphy-ctrl-glue", &res))
-               miphy_phy->syscfg_miphy_ctrl = res.start;
-
-       if (!miphy28lp_get_resource_byname(np, "miphy-status-glue", &res))
-               miphy_phy->syscfg_miphy_status = res.start;
-
-       if (!miphy28lp_get_resource_byname(np, "pcie-glue", &res))
-               miphy_phy->syscfg_pci = res.start;
-
-       if (!miphy28lp_get_resource_byname(np, "sata-glue", &res))
-               miphy_phy->syscfg_sata = res.start;
-
+       for (i = 0; i < SYSCFG_REG_MAX; i++) {
+               if (!of_property_read_u32_index(np, "st,syscfg", i, &ctrlreg))
+                       miphy_phy->syscfg_reg[i] = ctrlreg;
+       }
 
        return 0;
 }
@@ -1197,15 +1202,15 @@ static int miphy28lp_probe(struct platform_device *pdev)
        struct miphy28lp_dev *miphy_dev;
        struct phy_provider *provider;
        struct phy *phy;
-       int chancount, port = 0;
-       int ret;
+       int ret, port = 0;
 
        miphy_dev = devm_kzalloc(&pdev->dev, sizeof(*miphy_dev), GFP_KERNEL);
        if (!miphy_dev)
                return -ENOMEM;
 
-       chancount = of_get_child_count(np);
-       miphy_dev->phys = devm_kzalloc(&pdev->dev, sizeof(phy) * chancount,
+       miphy_dev->nphys = of_get_child_count(np);
+       miphy_dev->phys = devm_kzalloc(&pdev->dev,
+                                      sizeof(phy) * miphy_dev->nphys,
                                       GFP_KERNEL);
        if (!miphy_dev->phys)
                return -ENOMEM;