0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/greybus.h>
0010 #include "greybus_trace.h"
0011
0012 static ssize_t eject_store(struct device *dev,
0013 struct device_attribute *attr,
0014 const char *buf, size_t len)
0015 {
0016 struct gb_module *module = to_gb_module(dev);
0017 struct gb_interface *intf;
0018 size_t i;
0019 long val;
0020 int ret;
0021
0022 ret = kstrtol(buf, 0, &val);
0023 if (ret)
0024 return ret;
0025
0026 if (!val)
0027 return len;
0028
0029 for (i = 0; i < module->num_interfaces; ++i) {
0030 intf = module->interfaces[i];
0031
0032 mutex_lock(&intf->mutex);
0033
0034 intf->ejected = true;
0035 gb_interface_disable(intf);
0036 gb_interface_deactivate(intf);
0037 mutex_unlock(&intf->mutex);
0038 }
0039
0040
0041 ret = gb_svc_intf_eject(module->hd->svc, module->module_id);
0042 if (ret)
0043 return ret;
0044
0045 return len;
0046 }
0047 static DEVICE_ATTR_WO(eject);
0048
0049 static ssize_t module_id_show(struct device *dev,
0050 struct device_attribute *attr, char *buf)
0051 {
0052 struct gb_module *module = to_gb_module(dev);
0053
0054 return sprintf(buf, "%u\n", module->module_id);
0055 }
0056 static DEVICE_ATTR_RO(module_id);
0057
0058 static ssize_t num_interfaces_show(struct device *dev,
0059 struct device_attribute *attr, char *buf)
0060 {
0061 struct gb_module *module = to_gb_module(dev);
0062
0063 return sprintf(buf, "%zu\n", module->num_interfaces);
0064 }
0065 static DEVICE_ATTR_RO(num_interfaces);
0066
0067 static struct attribute *module_attrs[] = {
0068 &dev_attr_eject.attr,
0069 &dev_attr_module_id.attr,
0070 &dev_attr_num_interfaces.attr,
0071 NULL,
0072 };
0073 ATTRIBUTE_GROUPS(module);
0074
0075 static void gb_module_release(struct device *dev)
0076 {
0077 struct gb_module *module = to_gb_module(dev);
0078
0079 trace_gb_module_release(module);
0080
0081 kfree(module);
0082 }
0083
0084 struct device_type greybus_module_type = {
0085 .name = "greybus_module",
0086 .release = gb_module_release,
0087 };
0088
0089 struct gb_module *gb_module_create(struct gb_host_device *hd, u8 module_id,
0090 size_t num_interfaces)
0091 {
0092 struct gb_interface *intf;
0093 struct gb_module *module;
0094 int i;
0095
0096 module = kzalloc(struct_size(module, interfaces, num_interfaces),
0097 GFP_KERNEL);
0098 if (!module)
0099 return NULL;
0100
0101 module->hd = hd;
0102 module->module_id = module_id;
0103 module->num_interfaces = num_interfaces;
0104
0105 module->dev.parent = &hd->dev;
0106 module->dev.bus = &greybus_bus_type;
0107 module->dev.type = &greybus_module_type;
0108 module->dev.groups = module_groups;
0109 module->dev.dma_mask = hd->dev.dma_mask;
0110 device_initialize(&module->dev);
0111 dev_set_name(&module->dev, "%d-%u", hd->bus_id, module_id);
0112
0113 trace_gb_module_create(module);
0114
0115 for (i = 0; i < num_interfaces; ++i) {
0116 intf = gb_interface_create(module, module_id + i);
0117 if (!intf) {
0118 dev_err(&module->dev, "failed to create interface %u\n",
0119 module_id + i);
0120 goto err_put_interfaces;
0121 }
0122 module->interfaces[i] = intf;
0123 }
0124
0125 return module;
0126
0127 err_put_interfaces:
0128 for (--i; i >= 0; --i)
0129 gb_interface_put(module->interfaces[i]);
0130
0131 put_device(&module->dev);
0132
0133 return NULL;
0134 }
0135
0136
0137
0138
0139 static void gb_module_register_interface(struct gb_interface *intf)
0140 {
0141 struct gb_module *module = intf->module;
0142 u8 intf_id = intf->interface_id;
0143 int ret;
0144
0145 mutex_lock(&intf->mutex);
0146
0147 ret = gb_interface_activate(intf);
0148 if (ret) {
0149 if (intf->type != GB_INTERFACE_TYPE_DUMMY) {
0150 dev_err(&module->dev,
0151 "failed to activate interface %u: %d\n",
0152 intf_id, ret);
0153 }
0154
0155 gb_interface_add(intf);
0156 goto err_unlock;
0157 }
0158
0159 ret = gb_interface_add(intf);
0160 if (ret)
0161 goto err_interface_deactivate;
0162
0163 ret = gb_interface_enable(intf);
0164 if (ret) {
0165 dev_err(&module->dev, "failed to enable interface %u: %d\n",
0166 intf_id, ret);
0167 goto err_interface_deactivate;
0168 }
0169
0170 mutex_unlock(&intf->mutex);
0171
0172 return;
0173
0174 err_interface_deactivate:
0175 gb_interface_deactivate(intf);
0176 err_unlock:
0177 mutex_unlock(&intf->mutex);
0178 }
0179
0180 static void gb_module_deregister_interface(struct gb_interface *intf)
0181 {
0182
0183 if (intf->module->disconnected)
0184 intf->disconnected = true;
0185
0186 mutex_lock(&intf->mutex);
0187 intf->removed = true;
0188 gb_interface_disable(intf);
0189 gb_interface_deactivate(intf);
0190 mutex_unlock(&intf->mutex);
0191
0192 gb_interface_del(intf);
0193 }
0194
0195
0196 int gb_module_add(struct gb_module *module)
0197 {
0198 size_t i;
0199 int ret;
0200
0201 ret = device_add(&module->dev);
0202 if (ret) {
0203 dev_err(&module->dev, "failed to register module: %d\n", ret);
0204 return ret;
0205 }
0206
0207 trace_gb_module_add(module);
0208
0209 for (i = 0; i < module->num_interfaces; ++i)
0210 gb_module_register_interface(module->interfaces[i]);
0211
0212 return 0;
0213 }
0214
0215
0216 void gb_module_del(struct gb_module *module)
0217 {
0218 size_t i;
0219
0220 for (i = 0; i < module->num_interfaces; ++i)
0221 gb_module_deregister_interface(module->interfaces[i]);
0222
0223 trace_gb_module_del(module);
0224
0225 device_del(&module->dev);
0226 }
0227
0228 void gb_module_put(struct gb_module *module)
0229 {
0230 size_t i;
0231
0232 for (i = 0; i < module->num_interfaces; ++i)
0233 gb_interface_put(module->interfaces[i]);
0234
0235 put_device(&module->dev);
0236 }