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