Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fsi: Add support for device-tree provided chip IDs

They get retrieved from the device-tree and exposed
as an attribute in sysfs

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

+24
+24
drivers/fsi/fsi-core.c
··· 80 80 struct fsi_master *master; 81 81 int id; 82 82 int link; 83 + int chip_id; 83 84 uint32_t size; /* size of slave address space */ 84 85 u8 t_send_delay; 85 86 u8 t_echo_delay; ··· 718 717 static DEVICE_ATTR(send_echo_delays, 0600, 719 718 slave_send_echo_show, slave_send_echo_store); 720 719 720 + static ssize_t chip_id_show(struct device *dev, 721 + struct device_attribute *attr, 722 + char *buf) 723 + { 724 + struct fsi_slave *slave = to_fsi_slave(dev); 725 + 726 + return sprintf(buf, "%d\n", slave->chip_id); 727 + } 728 + 729 + static DEVICE_ATTR_RO(chip_id); 730 + 721 731 static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) 722 732 { 723 733 uint32_t chip_id; ··· 792 780 slave->t_send_delay = 16; 793 781 slave->t_echo_delay = 16; 794 782 783 + /* Get chip ID if any */ 784 + slave->chip_id = -1; 785 + if (slave->dev.of_node) { 786 + uint32_t prop; 787 + if (!of_property_read_u32(slave->dev.of_node, "chip-id", &prop)) 788 + slave->chip_id = prop; 789 + 790 + } 795 791 rc = fsi_slave_set_smode(slave); 796 792 if (rc) { 797 793 dev_warn(&master->dev, ··· 833 813 rc = device_create_file(&slave->dev, &dev_attr_send_echo_delays); 834 814 if (rc) 835 815 dev_warn(&slave->dev, "failed to create delay attr: %d\n", rc); 816 + 817 + rc = device_create_file(&slave->dev, &dev_attr_chip_id); 818 + if (rc) 819 + dev_warn(&slave->dev, "failed to create chip id: %d\n", rc); 836 820 837 821 rc = fsi_slave_scan(slave); 838 822 if (rc)