mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 23:39:18 +00:00
net: dsa: microchip: Add Microchip KSZ8863 SPI based driver support
Add KSZ88X3 driver support. We add support for the KXZ88X3 three port switches using the SPI Interface. Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4b20a07e10
commit
cc13e52c3a
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user