As further preparation for implementing support for mdio management, lift the initialization of the ->gcb_regmap, the initial (and optional) bus initialization callback, and the call of ocelot_chip_reset() to ocelot_core_init(). Signed-off-by: Rasmus Villemoes <ravi@xxxxxxxxx> --- drivers/mfd/ocelot-core.c | 28 +++++++++++++++++++++++++++- drivers/mfd/ocelot-spi.c | 33 +-------------------------------- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/drivers/mfd/ocelot-core.c b/drivers/mfd/ocelot-core.c index 9caab83138e59..c0ab5492c83f9 100644 --- a/drivers/mfd/ocelot-core.c +++ b/drivers/mfd/ocelot-core.c @@ -28,6 +28,9 @@ #include "ocelot.h" +#define VSC7512_CHIP_REGS_RES_START 0x71070000 +#define VSC7512_CHIP_REGS_RES_SIZE 0x14 + #define REG_GCB_SOFT_RST 0x0008 #define BIT_SOFT_CHIP_RST BIT(0) @@ -123,6 +126,11 @@ int ocelot_chip_reset(struct device *dev) } EXPORT_SYMBOL_NS(ocelot_chip_reset, "MFD_OCELOT"); +static const struct resource vsc7512_gcb_resource = + DEFINE_RES_REG_NAMED(VSC7512_CHIP_REGS_RES_START, + VSC7512_CHIP_REGS_RES_SIZE, + "devcpu_gcb_chip_regs"); + static const struct resource vsc7512_miim0_resources[] = { DEFINE_RES_REG_NAMED(VSC7512_MIIM0_RES_START, VSC7512_MIIM_RES_SIZE, "gcb_miim0"), DEFINE_RES_REG_NAMED(VSC7512_PHY_RES_START, VSC7512_PHY_RES_SIZE, "gcb_phy"), @@ -227,7 +235,25 @@ static void ocelot_core_try_add_regmaps(struct device *dev, int ocelot_core_init(struct device *dev) { - int i, ndevs; + struct ocelot_ddata *ddata = dev_get_drvdata(dev); + struct regmap *r; + int i, ndevs, err; + + r = ddata->init_regmap(dev, &vsc7512_gcb_resource); + if (IS_ERR(r)) + return PTR_ERR(r); + + ddata->gcb_regmap = r; + + if (ddata->init_bus) { + err = ddata->init_bus(dev); + if (err) + return dev_err_probe(dev, err, "Error initializing bus\n"); + } + + err = ocelot_chip_reset(dev); + if (err) + return dev_err_probe(dev, err, "Error resetting device\n"); ndevs = ARRAY_SIZE(vsc7512_devs); diff --git a/drivers/mfd/ocelot-spi.c b/drivers/mfd/ocelot-spi.c index 37828dd3ee95e..1844b8451e8e7 100644 --- a/drivers/mfd/ocelot-spi.c +++ b/drivers/mfd/ocelot-spi.c @@ -38,9 +38,6 @@ #define VSC7512_DEVCPU_ORG_RES_START 0x71000000 #define VSC7512_DEVCPU_ORG_RES_SIZE 0x38 -#define VSC7512_CHIP_REGS_RES_START 0x71070000 -#define VSC7512_CHIP_REGS_RES_SIZE 0x14 - #define OCELOT_SPI_BYTE_ORDER_LE 0x00000000 #define OCELOT_SPI_BYTE_ORDER_BE 0x81818181 @@ -55,11 +52,6 @@ static const struct resource vsc7512_dev_cpuorg_resource = VSC7512_DEVCPU_ORG_RES_SIZE, "devcpu_org"); -static const struct resource vsc7512_gcb_resource = - DEFINE_RES_REG_NAMED(VSC7512_CHIP_REGS_RES_START, - VSC7512_CHIP_REGS_RES_SIZE, - "devcpu_gcb_chip_regs"); - static int ocelot_spi_initialize(struct device *dev) { struct ocelot_ddata *ddata = dev_get_drvdata(dev); @@ -246,30 +238,7 @@ static int ocelot_spi_probe(struct spi_device *spi) ddata->cpuorg_regmap = r; - r = ocelot_spi_init_regmap(dev, &vsc7512_gcb_resource); - if (IS_ERR(r)) - return PTR_ERR(r); - - ddata->gcb_regmap = r; - - /* - * The chip must be set up for SPI before it gets initialized and reset. - * This must be done before calling init, and after a chip reset is - * performed. - */ - err = ocelot_spi_initialize(dev); - if (err) - return dev_err_probe(dev, err, "Error initializing SPI bus\n"); - - err = ocelot_chip_reset(dev); - if (err) - return dev_err_probe(dev, err, "Error resetting device\n"); - - err = ocelot_core_init(dev); - if (err) - return dev_err_probe(dev, err, "Error initializing Ocelot core\n"); - - return 0; + return ocelot_core_init(dev); } static const struct spi_device_id ocelot_spi_ids[] = { -- 2.49.0