Lines Matching full:spi
8 * on KEBA CP500 devices. The LAN9252 is connected over SPI, which is also named
12 #include <linux/spi/spi.h>
15 /* SPI commands */
79 static int lan9252_spi_read(struct spi_device *spi, u16 addr, u32 *data) in lan9252_spi_read() argument
87 return spi_write_then_read(spi, (u8 *)&cmd, in lan9252_spi_read()
92 static int lan9252_spi_write(struct spi_device *spi, u16 addr, u32 data) in lan9252_spi_write() argument
101 return spi_write(spi, (u8 *)&cmd, sizeof(struct lan9252_write_cmd)); in lan9252_spi_write()
104 static bool lan9252_init(struct spi_device *spi) in lan9252_init() argument
109 ret = lan9252_spi_read(spi, LAN9252_BYTE_TEST, &data); in lan9252_init()
113 ret = lan9252_spi_read(spi, LAN9252_HW_CFG, &data); in lan9252_init()
128 static int lan9252_esc_wait(struct spi_device *spi) in lan9252_esc_wait() argument
136 ret = lan9252_spi_read(spi, LAN9252_ECAT_CSR_CMD, &data); in lan9252_esc_wait()
143 ret = lan9252_spi_read(spi, LAN9252_ECAT_CSR_CMD, &data); in lan9252_esc_wait()
153 static int lan9252_esc_read(struct spi_device *spi, u16 addr, u32 *data) in lan9252_esc_read() argument
162 ret = lan9252_spi_write(spi, LAN9252_ECAT_CSR_CMD, csr_cmd); in lan9252_esc_read()
166 ret = lan9252_esc_wait(spi); in lan9252_esc_read()
170 ret = lan9252_spi_read(spi, LAN9252_ECAT_CSR_DATA, data); in lan9252_esc_read()
177 static int lan9252_esc_write(struct spi_device *spi, u16 addr, u32 data) in lan9252_esc_write() argument
183 ret = lan9252_spi_write(spi, LAN9252_ECAT_CSR_DATA, data); in lan9252_esc_write()
190 ret = lan9252_spi_write(spi, LAN9252_ECAT_CSR_CMD, csr_cmd); in lan9252_esc_write()
194 ret = lan9252_esc_wait(spi); in lan9252_esc_write()
201 static int lan9252_access_mii(struct spi_device *spi, bool access) in lan9252_access_mii() argument
210 return lan9252_esc_write(spi, LAN9252_ESC_MII_PDI, data); in lan9252_access_mii()
213 static int lan9252_mii_wait(struct spi_device *spi) in lan9252_mii_wait() argument
221 ret = lan9252_esc_read(spi, LAN9252_ESC_MII, &data); in lan9252_mii_wait()
230 ret = lan9252_esc_read(spi, LAN9252_ESC_MII, &data); in lan9252_mii_wait()
242 static int lan9252_mii_read(struct spi_device *spi, u8 phy_addr, u8 reg_addr, in lan9252_mii_read() argument
247 ret = lan9252_esc_write(spi, LAN9252_ESC_PHY_ADDR, phy_addr); in lan9252_mii_read()
250 ret = lan9252_esc_write(spi, LAN9252_ESC_PHY_REG_ADDR, reg_addr); in lan9252_mii_read()
254 ret = lan9252_esc_write(spi, LAN9252_ESC_MII, LAN9252_ESC_MII_READ); in lan9252_mii_read()
258 ret = lan9252_mii_wait(spi); in lan9252_mii_read()
262 return lan9252_esc_read(spi, LAN9252_ESC_PHY_DATA, data); in lan9252_mii_read()
265 static int lan9252_mii_write(struct spi_device *spi, u8 phy_addr, u8 reg_addr, in lan9252_mii_write() argument
270 ret = lan9252_esc_write(spi, LAN9252_ESC_PHY_ADDR, phy_addr); in lan9252_mii_write()
273 ret = lan9252_esc_write(spi, LAN9252_ESC_PHY_REG_ADDR, reg_addr); in lan9252_mii_write()
276 ret = lan9252_esc_write(spi, LAN9252_ESC_PHY_DATA, data); in lan9252_mii_write()
280 ret = lan9252_esc_write(spi, LAN9252_ESC_MII, LAN9252_ESC_MII_WRITE); in lan9252_mii_write()
284 return lan9252_mii_wait(spi); in lan9252_mii_write()
287 static int lan9252_probe(struct spi_device *spi) in lan9252_probe() argument
294 while (retry && !lan9252_init(spi)) in lan9252_probe()
297 dev_err(&spi->dev, in lan9252_probe()
298 "Can't initialize LAN9252 SPI communication!"); in lan9252_probe()
303 ret = lan9252_access_mii(spi, true); in lan9252_probe()
305 dev_err(&spi->dev, "Can't enable access to MII management!"); in lan9252_probe()
315 ret = lan9252_mii_read(spi, PHY_ADDRESS, MII_BMCR, &data); in lan9252_probe()
317 dev_err(&spi->dev, "Can't read LAN9252 configuration!"); in lan9252_probe()
326 ret = lan9252_mii_write(spi, PHY_ADDRESS, MII_BMCR, data); in lan9252_probe()
328 dev_err(&spi->dev, in lan9252_probe()
332 dev_info(&spi->dev, "LAN9252 PHY configuration"); in lan9252_probe()
336 lan9252_access_mii(spi, false); in lan9252_probe()
345 MODULE_DEVICE_TABLE(spi, lan9252_id);