^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <linux/device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <linux/etherdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <linux/gpio/driver.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * struct vsc73xx - VSC73xx state container
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) struct vsc73xx {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) struct gpio_desc *reset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) struct dsa_switch *ds;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) struct gpio_chip gc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) u16 chipid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) u8 addr[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) const struct vsc73xx_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) void *priv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct vsc73xx_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) int (*read)(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) u32 *val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) int (*write)(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) u32 val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) int vsc73xx_is_addr_valid(u8 block, u8 subblock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) int vsc73xx_probe(struct vsc73xx *vsc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) int vsc73xx_remove(struct vsc73xx *vsc);