Skip to content

Commit

Permalink
net: dsa: microchip: Add Microchip KSZ8863 SPI based driver support
Browse files Browse the repository at this point in the history
Add KSZ88X3 driver support. We add support for the KXZ88X3 three port
switches using the SPI Interface.

Reviewed-by: Florian Fainelli <[email protected]>
Signed-off-by: Michael Grzeschik <[email protected]>
Signed-off-by: Oleksij Rempel <[email protected]>
Reviewed-by: Andrew Lunn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
mgrzeschik authored and davem330 committed Apr 27, 2021
1 parent 4b20a07 commit cc13e52
Showing 1 changed file with 32 additions and 12 deletions.
44 changes: 32 additions & 12 deletions drivers/net/dsa/microchip/ksz8795_spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,52 @@
#include <linux/regmap.h>
#include <linux/spi/spi.h>

#include "ksz8.h"
#include "ksz_common.h"

#define SPI_ADDR_SHIFT 12
#define SPI_ADDR_ALIGN 3
#define SPI_TURNAROUND_SHIFT 1
#define KSZ8795_SPI_ADDR_SHIFT 12
#define KSZ8795_SPI_ADDR_ALIGN 3
#define KSZ8795_SPI_TURNAROUND_SHIFT 1

KSZ_REGMAP_TABLE(ksz8795, 16, SPI_ADDR_SHIFT,
SPI_TURNAROUND_SHIFT, SPI_ADDR_ALIGN);
#define KSZ8863_SPI_ADDR_SHIFT 8
#define KSZ8863_SPI_ADDR_ALIGN 8
#define KSZ8863_SPI_TURNAROUND_SHIFT 0

KSZ_REGMAP_TABLE(ksz8795, 16, KSZ8795_SPI_ADDR_SHIFT,
KSZ8795_SPI_TURNAROUND_SHIFT, KSZ8795_SPI_ADDR_ALIGN);

KSZ_REGMAP_TABLE(ksz8863, 16, KSZ8863_SPI_ADDR_SHIFT,
KSZ8863_SPI_TURNAROUND_SHIFT, KSZ8863_SPI_ADDR_ALIGN);

static int ksz8795_spi_probe(struct spi_device *spi)
{
const struct regmap_config *regmap_config;
struct device *ddev = &spi->dev;
struct regmap_config rc;
struct ksz_device *dev;
int i, ret;
struct ksz8 *ksz8;
int i, ret = 0;

dev = ksz_switch_alloc(&spi->dev, spi);
ksz8 = devm_kzalloc(&spi->dev, sizeof(struct ksz8), GFP_KERNEL);
ksz8->priv = spi;

dev = ksz_switch_alloc(&spi->dev, ksz8);
if (!dev)
return -ENOMEM;

regmap_config = device_get_match_data(ddev);
if (!regmap_config)
return -EINVAL;

for (i = 0; i < ARRAY_SIZE(ksz8795_regmap_config); i++) {
rc = ksz8795_regmap_config[i];
rc = regmap_config[i];
rc.lock_arg = &dev->regmap_mutex;
dev->regmap[i] = devm_regmap_init_spi(spi, &rc);
if (IS_ERR(dev->regmap[i])) {
ret = PTR_ERR(dev->regmap[i]);
dev_err(&spi->dev,
"Failed to initialize regmap%i: %d\n",
ksz8795_regmap_config[i].val_bits, ret);
regmap_config[i].val_bits, ret);
return ret;
}
}
Expand Down Expand Up @@ -85,9 +103,11 @@ static void ksz8795_spi_shutdown(struct spi_device *spi)
}

static const struct of_device_id ksz8795_dt_ids[] = {
{ .compatible = "microchip,ksz8765" },
{ .compatible = "microchip,ksz8794" },
{ .compatible = "microchip,ksz8795" },
{ .compatible = "microchip,ksz8765", .data = &ksz8795_regmap_config },
{ .compatible = "microchip,ksz8794", .data = &ksz8795_regmap_config },
{ .compatible = "microchip,ksz8795", .data = &ksz8795_regmap_config },
{ .compatible = "microchip,ksz8863", .data = &ksz8863_regmap_config },
{ .compatible = "microchip,ksz8873", .data = &ksz8863_regmap_config },
{},
};
MODULE_DEVICE_TABLE(of, ksz8795_dt_ids);
Expand Down

0 comments on commit cc13e52

Please sign in to comment.