]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ata: ahci_imx: add disable for spread-spectrum
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 24 Jun 2014 10:19:47 +0000 (11:19 +0100)
committerNitin Garg <nitin.garg@freescale.com>
Fri, 16 Jan 2015 03:17:27 +0000 (21:17 -0600)
Spread-spectrum doesn't work with Cubox-i hardware, so we have to
disable this feature.  Add a DT property so that platforms can
indicate that this feature should not be enabled.

Having it as a negative property keeps existing DT files working.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Reviewed-by: Shawn Guo <shawn.guo@freescale.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
(cherry picked from commit a6e726244c78e04d0af754c625036be8f92a9afd)

drivers/ata/ahci_imx.c

index da92f2a49cb09e582971f8d8beaa18068fbb50ad..dae1d5632b3de226481090fdf4adc1286046aeaa 100644 (file)
@@ -373,6 +373,7 @@ struct reg_property {
        const struct reg_value *values;
        size_t num_values;
        u32 def_value;
+       u32 set_value;
 };
 
 static const struct reg_value gpr13_tx_level[] = {
@@ -470,6 +471,10 @@ static const struct reg_property gpr13_props[] = {
                .values = gpr13_rx_eq,
                .num_values = ARRAY_SIZE(gpr13_rx_eq),
                .def_value = IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB,
+       }, {
+               .name = "fsl,no-spread-spectrum",
+               .def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN,
+               .set_value = 0,
        },
 };
 
@@ -483,6 +488,14 @@ static u32 imx_ahci_parse_props(struct device *dev,
        for (i = 0; i < num; i++, prop++) {
                u32 of_val;
 
+               if (prop->num_values == 0) {
+                       if (of_property_read_bool(np, prop->name))
+                               reg_value |= prop->set_value;
+                       else
+                               reg_value |= prop->def_value;
+                       continue;
+               }
+
                if (of_property_read_u32(np, prop->name, &of_val)) {
                        dev_info(dev, "%s not specified, using %08x\n",
                                prop->name, prop->def_value);
@@ -567,7 +580,6 @@ static int imx_ahci_probe(struct platform_device *pdev)
                                   IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M |
                                   IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F |
                                   IMX6Q_GPR13_SATA_SPD_MODE_3P0G |
-                                  IMX6Q_GPR13_SATA_MPLL_SS_EN |
                                   reg_value;
        }