@@ -56,6 +56,8 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
5656 return ret ;
5757 }
5858
59+ ida_init (& bus -> slave_ida );
60+
5961 ret = sdw_master_device_add (bus , parent , fwnode );
6062 if (ret < 0 ) {
6163 dev_err (parent , "Failed to add master device at link %d\n" ,
@@ -751,49 +753,44 @@ static int sdw_get_device_num(struct sdw_slave *slave)
751753static int sdw_assign_device_num (struct sdw_slave * slave )
752754{
753755 struct sdw_bus * bus = slave -> bus ;
754- int ret , dev_num ;
755- bool new_device = false ;
756+ struct device * dev = bus -> dev ;
757+ int ret ;
756758
757759 /* check first if device number is assigned, if so reuse that */
758760 if (!slave -> dev_num ) {
759761 if (!slave -> dev_num_sticky ) {
762+ int dev_num ;
763+
760764 mutex_lock (& slave -> bus -> bus_lock );
761765 dev_num = sdw_get_device_num (slave );
762766 mutex_unlock (& slave -> bus -> bus_lock );
763767 if (dev_num < 0 ) {
764- dev_err (bus -> dev , "Get dev_num failed: %d\n" ,
765- dev_num );
768+ dev_err (dev , "Get dev_num failed: %d\n" , dev_num );
766769 return dev_num ;
767770 }
768- slave -> dev_num = dev_num ;
771+
769772 slave -> dev_num_sticky = dev_num ;
770- new_device = true;
771773 } else {
772- slave -> dev_num = slave -> dev_num_sticky ;
774+ dev_dbg (dev , "Slave already registered, reusing dev_num: %d\n" ,
775+ slave -> dev_num_sticky );
773776 }
774777 }
775778
776- if (!new_device )
777- dev_dbg (bus -> dev ,
778- "Slave already registered, reusing dev_num:%d\n" ,
779- slave -> dev_num );
780-
781779 /* Clear the slave->dev_num to transfer message on device 0 */
782- dev_num = slave -> dev_num ;
783780 slave -> dev_num = 0 ;
784781
785- ret = sdw_write_no_pm (slave , SDW_SCP_DEVNUMBER , dev_num );
782+ ret = sdw_write_no_pm (slave , SDW_SCP_DEVNUMBER , slave -> dev_num_sticky );
786783 if (ret < 0 ) {
787- dev_err (bus -> dev , "Program device_num %d failed: %d\n" ,
788- dev_num , ret );
784+ dev_err (dev , "Program device_num %d failed: %d\n" ,
785+ slave -> dev_num_sticky , ret );
789786 return ret ;
790787 }
791788
792789 /* After xfer of msg, restore dev_num */
793790 slave -> dev_num = slave -> dev_num_sticky ;
794791
795792 if (bus -> ops && bus -> ops -> new_peripheral_assigned )
796- bus -> ops -> new_peripheral_assigned (bus , slave , dev_num );
793+ bus -> ops -> new_peripheral_assigned (bus , slave , slave -> dev_num );
797794
798795 return 0 ;
799796}
0 commit comments