Lines Matching refs:mcli

131 	struct mctp_i2c_client *mcli = NULL;  in mctp_i2c_new_client()  local
157 mcli = kzalloc(sizeof(*mcli), GFP_KERNEL); in mctp_i2c_new_client()
158 if (!mcli) { in mctp_i2c_new_client()
162 spin_lock_init(&mcli->sel_lock); in mctp_i2c_new_client()
163 INIT_LIST_HEAD(&mcli->devs); in mctp_i2c_new_client()
164 INIT_LIST_HEAD(&mcli->list); in mctp_i2c_new_client()
165 mcli->lladdr = client->addr & 0xff; in mctp_i2c_new_client()
166 mcli->client = client; in mctp_i2c_new_client()
167 i2c_set_clientdata(client, mcli); in mctp_i2c_new_client()
169 rc = i2c_slave_register(mcli->client, mctp_i2c_slave_cb); in mctp_i2c_new_client()
172 mcli->client = NULL; in mctp_i2c_new_client()
177 return mcli; in mctp_i2c_new_client()
179 if (mcli) { in mctp_i2c_new_client()
180 if (mcli->client) in mctp_i2c_new_client()
181 i2c_unregister_device(mcli->client); in mctp_i2c_new_client()
182 kfree(mcli); in mctp_i2c_new_client()
187 static void mctp_i2c_free_client(struct mctp_i2c_client *mcli) in mctp_i2c_free_client() argument
192 WARN_ON(!list_empty(&mcli->devs)); in mctp_i2c_free_client()
193 WARN_ON(mcli->sel); /* sanity check, no locking */ in mctp_i2c_free_client()
195 rc = i2c_slave_unregister(mcli->client); in mctp_i2c_free_client()
198 dev_err(&mcli->client->dev, "i2c unregister failed %d\n", rc); in mctp_i2c_free_client()
200 kfree(mcli); in mctp_i2c_free_client()
206 static void __mctp_i2c_device_select(struct mctp_i2c_client *mcli, in __mctp_i2c_device_select() argument
209 assert_spin_locked(&mcli->sel_lock); in __mctp_i2c_device_select()
212 if (mcli->sel) in __mctp_i2c_device_select()
213 dev_put(mcli->sel->ndev); in __mctp_i2c_device_select()
214 mcli->sel = midev; in __mctp_i2c_device_select()
218 static void mctp_i2c_device_select(struct mctp_i2c_client *mcli, in mctp_i2c_device_select() argument
223 spin_lock_irqsave(&mcli->sel_lock, flags); in mctp_i2c_device_select()
224 __mctp_i2c_device_select(mcli, midev); in mctp_i2c_device_select()
225 spin_unlock_irqrestore(&mcli->sel_lock, flags); in mctp_i2c_device_select()
231 struct mctp_i2c_client *mcli = i2c_get_clientdata(client); in mctp_i2c_slave_cb() local
236 spin_lock_irqsave(&mcli->sel_lock, flags); in mctp_i2c_slave_cb()
237 midev = mcli->sel; in mctp_i2c_slave_cb()
240 spin_unlock_irqrestore(&mcli->sel_lock, flags); in mctp_i2c_slave_cb()
257 midev->rx_buffer[0] = mcli->lladdr << 1; in mctp_i2c_slave_cb()
688 struct mctp_i2c_client *mcli, in mctp_i2c_midev_init() argument
702 get_device(&mcli->client->dev); in mctp_i2c_midev_init()
703 midev->client = mcli; in mctp_i2c_midev_init()
714 spin_lock_irqsave(&mcli->sel_lock, flags); in mctp_i2c_midev_init()
715 list_add(&midev->list, &mcli->devs); in mctp_i2c_midev_init()
717 if (!mcli->sel) in mctp_i2c_midev_init()
718 __mctp_i2c_device_select(mcli, midev); in mctp_i2c_midev_init()
719 spin_unlock_irqrestore(&mcli->sel_lock, flags); in mctp_i2c_midev_init()
730 struct mctp_i2c_client *mcli = midev->client; in mctp_i2c_midev_free() local
742 spin_lock_irqsave(&mcli->sel_lock, flags); in mctp_i2c_midev_free()
744 if (mcli->sel == midev) { in mctp_i2c_midev_free()
747 first = list_first_entry_or_null(&mcli->devs, struct mctp_i2c_dev, list); in mctp_i2c_midev_free()
748 __mctp_i2c_device_select(mcli, first); in mctp_i2c_midev_free()
750 spin_unlock_irqrestore(&mcli->sel_lock, flags); in mctp_i2c_midev_free()
754 put_device(&mcli->client->dev); in mctp_i2c_midev_free()
802 static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli, in mctp_i2c_add_netdev() argument
813 if (root != mcli->client->adapter) { in mctp_i2c_add_netdev()
814 dev_err(&mcli->client->dev, in mctp_i2c_add_netdev()
816 mcli->client->adapter->name, root->name); in mctp_i2c_add_netdev()
824 dev_err(&mcli->client->dev, "alloc netdev failed\n"); in mctp_i2c_add_netdev()
830 dev_addr_set(ndev, &mcli->lladdr); in mctp_i2c_add_netdev()
832 midev = mctp_i2c_midev_init(ndev, mcli, adap); in mctp_i2c_add_netdev()
841 dev_err(&mcli->client->dev, in mctp_i2c_add_netdev()
861 static void mctp_i2c_remove_netdev(struct mctp_i2c_client *mcli, in mctp_i2c_remove_netdev() argument
868 spin_lock_irqsave(&mcli->sel_lock, flags); in mctp_i2c_remove_netdev()
870 list_for_each_entry(m, &mcli->devs, list) in mctp_i2c_remove_netdev()
875 spin_unlock_irqrestore(&mcli->sel_lock, flags); in mctp_i2c_remove_netdev()
918 struct mctp_i2c_client *mcli = data; in mctp_i2c_client_try_attach() local
923 if (mcli->client->adapter != root) in mctp_i2c_client_try_attach()
931 return mctp_i2c_add_netdev(mcli, adap); in mctp_i2c_client_try_attach()
936 struct mctp_i2c_client *mcli = NULL, *m = NULL; in mctp_i2c_notify_add() local
951 mcli = m; in mctp_i2c_notify_add()
956 if (mcli) { in mctp_i2c_notify_add()
957 rc = mctp_i2c_add_netdev(mcli, adap); in mctp_i2c_notify_add()
967 struct mctp_i2c_client *mcli = NULL; in mctp_i2c_notify_del() local
974 list_for_each_entry(mcli, &driver_clients, list) { in mctp_i2c_notify_del()
975 if (mcli->client->adapter == root) { in mctp_i2c_notify_del()
976 mctp_i2c_remove_netdev(mcli, adap); in mctp_i2c_notify_del()
985 struct mctp_i2c_client *mcli = NULL; in mctp_i2c_probe() local
989 mcli = mctp_i2c_new_client(client); in mctp_i2c_probe()
990 if (IS_ERR(mcli)) { in mctp_i2c_probe()
991 rc = PTR_ERR(mcli); in mctp_i2c_probe()
992 mcli = NULL; in mctp_i2c_probe()
995 list_add(&mcli->list, &driver_clients); in mctp_i2c_probe()
999 i2c_for_each_dev(mcli, mctp_i2c_client_try_attach); in mctp_i2c_probe()
1008 struct mctp_i2c_client *mcli = i2c_get_clientdata(client); in mctp_i2c_remove() local
1012 list_del(&mcli->list); in mctp_i2c_remove()
1014 list_for_each_entry_safe(midev, tmp, &mcli->devs, list) in mctp_i2c_remove()
1017 mctp_i2c_free_client(mcli); in mctp_i2c_remove()