• Home
  • Raw
  • Download

Lines Matching full:ks

175  * @ks: pointer to switch instance
185 static inline __be16 create_spi_cmd(struct ks8995_switch *ks, int cmd, in create_spi_cmd() argument
191 result <<= ks->chip->addr_width + ks->chip->addr_shift; in create_spi_cmd()
193 result |= address << ks->chip->addr_shift; in create_spi_cmd()
198 static int ks8995_read(struct ks8995_switch *ks, char *buf, in ks8995_read() argument
206 cmd = create_spi_cmd(ks, KS8995_CMD_READ, offset); in ks8995_read()
219 mutex_lock(&ks->lock); in ks8995_read()
220 err = spi_sync(ks->spi, &m); in ks8995_read()
221 mutex_unlock(&ks->lock); in ks8995_read()
226 static int ks8995_write(struct ks8995_switch *ks, char *buf, in ks8995_write() argument
234 cmd = create_spi_cmd(ks, KS8995_CMD_WRITE, offset); in ks8995_write()
247 mutex_lock(&ks->lock); in ks8995_write()
248 err = spi_sync(ks->spi, &m); in ks8995_write()
249 mutex_unlock(&ks->lock); in ks8995_write()
254 static inline int ks8995_read_reg(struct ks8995_switch *ks, u8 addr, u8 *buf) in ks8995_read_reg() argument
256 return ks8995_read(ks, buf, addr, 1) != 1; in ks8995_read_reg()
259 static inline int ks8995_write_reg(struct ks8995_switch *ks, u8 addr, u8 val) in ks8995_write_reg() argument
263 return ks8995_write(ks, &buf, addr, 1) != 1; in ks8995_write_reg()
268 static int ks8995_stop(struct ks8995_switch *ks) in ks8995_stop() argument
270 return ks8995_write_reg(ks, KS8995_REG_ID1, 0); in ks8995_stop()
273 static int ks8995_start(struct ks8995_switch *ks) in ks8995_start() argument
275 return ks8995_write_reg(ks, KS8995_REG_ID1, 1); in ks8995_start()
278 static int ks8995_reset(struct ks8995_switch *ks) in ks8995_reset() argument
282 err = ks8995_stop(ks); in ks8995_reset()
288 return ks8995_start(ks); in ks8995_reset()
316 * @ks: pointer to switch instance
320 static int ks8995_get_revision(struct ks8995_switch *ks) in ks8995_get_revision() argument
326 err = ks8995_read_reg(ks, KS8995_REG_ID0, &id0); in ks8995_get_revision()
333 if (id0 != ks->chip->family_id) { in ks8995_get_revision()
334 dev_err(&ks->spi->dev, "chip family id mismatch: expected 0x%02x but 0x%02x read\n", in ks8995_get_revision()
335 ks->chip->family_id, id0); in ks8995_get_revision()
340 switch (ks->chip->family_id) { in ks8995_get_revision()
343 err = ks8995_read_reg(ks, KS8995_REG_ID1, &id1); in ks8995_get_revision()
351 (get_chip_id(id1) == ks->chip->chip_id)) { in ks8995_get_revision()
353 ks->revision_id = get_chip_rev(id1); in ks8995_get_revision()
356 err = ks8995_read_reg(ks, KS8995_REG_ID1, &ksz8864_id); in ks8995_get_revision()
363 (ks->chip->chip_id == KSZ8864_CHIP_ID)) { in ks8995_get_revision()
364 ks->revision_id = get_chip_rev(id1); in ks8995_get_revision()
368 dev_err(&ks->spi->dev, "unsupported chip id for KS8995 family: 0x%02x\n", in ks8995_get_revision()
375 err = ks8995_read_reg(ks, KS8995_REG_ID1, &id1); in ks8995_get_revision()
381 if (get_chip_id(id1) == ks->chip->chip_id) { in ks8995_get_revision()
382 ks->revision_id = get_chip_rev(id1); in ks8995_get_revision()
384 dev_err(&ks->spi->dev, "unsupported chip id for KSZ8795 family: 0x%02x\n", in ks8995_get_revision()
390 dev_err(&ks->spi->dev, "unsupported family id: 0x%02x\n", id0); in ks8995_get_revision()
411 struct ks8995_switch *ks; in ks8995_probe() local
420 ks = devm_kzalloc(&spi->dev, sizeof(*ks), GFP_KERNEL); in ks8995_probe()
421 if (!ks) in ks8995_probe()
424 mutex_init(&ks->lock); in ks8995_probe()
425 ks->spi = spi; in ks8995_probe()
426 ks->chip = &ks8995_chip[variant]; in ks8995_probe()
428 ks->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", in ks8995_probe()
430 err = PTR_ERR_OR_ZERO(ks->reset_gpio); in ks8995_probe()
437 err = gpiod_set_consumer_name(ks->reset_gpio, "switch-reset"); in ks8995_probe()
443 gpiod_set_value_cansleep(ks->reset_gpio, 0); in ks8995_probe()
445 spi_set_drvdata(spi, ks); in ks8995_probe()
455 err = ks8995_get_revision(ks); in ks8995_probe()
459 memcpy(&ks->regs_attr, &ks8995_registers_attr, sizeof(ks->regs_attr)); in ks8995_probe()
460 ks->regs_attr.size = ks->chip->regs_size; in ks8995_probe()
462 err = ks8995_reset(ks); in ks8995_probe()
466 sysfs_attr_init(&ks->regs_attr.attr); in ks8995_probe()
467 err = sysfs_create_bin_file(&spi->dev.kobj, &ks->regs_attr); in ks8995_probe()
475 ks->chip->name, ks->chip->chip_id, ks->revision_id); in ks8995_probe()
482 struct ks8995_switch *ks = spi_get_drvdata(spi); in ks8995_remove() local
484 sysfs_remove_bin_file(&spi->dev.kobj, &ks->regs_attr); in ks8995_remove()
487 gpiod_set_value_cansleep(ks->reset_gpio, 1); in ks8995_remove()