xref: /linux/drivers/net/dsa/vitesse-vsc73xx.h (revision 0650bf52b31ff35dc6430fc2e37969c36baba724)
195711cd5SPawel Dembicki /* SPDX-License-Identifier: GPL-2.0 */
295711cd5SPawel Dembicki #include <linux/device.h>
395711cd5SPawel Dembicki #include <linux/etherdevice.h>
495711cd5SPawel Dembicki #include <linux/gpio/driver.h>
595711cd5SPawel Dembicki 
695711cd5SPawel Dembicki /**
795711cd5SPawel Dembicki  * struct vsc73xx - VSC73xx state container
895711cd5SPawel Dembicki  */
995711cd5SPawel Dembicki struct vsc73xx {
1095711cd5SPawel Dembicki 	struct device			*dev;
1195711cd5SPawel Dembicki 	struct gpio_desc		*reset;
1295711cd5SPawel Dembicki 	struct dsa_switch		*ds;
1395711cd5SPawel Dembicki 	struct gpio_chip		gc;
1495711cd5SPawel Dembicki 	u16				chipid;
1595711cd5SPawel Dembicki 	u8				addr[ETH_ALEN];
1695711cd5SPawel Dembicki 	const struct vsc73xx_ops	*ops;
1795711cd5SPawel Dembicki 	void				*priv;
1895711cd5SPawel Dembicki };
1995711cd5SPawel Dembicki 
2095711cd5SPawel Dembicki struct vsc73xx_ops {
2195711cd5SPawel Dembicki 	int (*read)(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg,
2295711cd5SPawel Dembicki 		    u32 *val);
2395711cd5SPawel Dembicki 	int (*write)(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg,
2495711cd5SPawel Dembicki 		     u32 val);
2595711cd5SPawel Dembicki };
2695711cd5SPawel Dembicki 
2795711cd5SPawel Dembicki int vsc73xx_is_addr_valid(u8 block, u8 subblock);
2895711cd5SPawel Dembicki int vsc73xx_probe(struct vsc73xx *vsc);
2995711cd5SPawel Dembicki int vsc73xx_remove(struct vsc73xx *vsc);
30*0650bf52SVladimir Oltean void vsc73xx_shutdown(struct vsc73xx *vsc);
31