|
@@ -90,6 +90,60 @@ static void mcb_shutdown(struct device *dev)
|
|
|
mdrv->shutdown(mdev);
|
|
|
}
|
|
|
|
|
|
+static ssize_t revision_show(struct device *dev, struct device_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ struct mcb_bus *bus = to_mcb_bus(dev);
|
|
|
+
|
|
|
+ return scnprintf(buf, PAGE_SIZE, "%d\n", bus->revision);
|
|
|
+}
|
|
|
+static DEVICE_ATTR_RO(revision);
|
|
|
+
|
|
|
+static ssize_t model_show(struct device *dev, struct device_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ struct mcb_bus *bus = to_mcb_bus(dev);
|
|
|
+
|
|
|
+ return scnprintf(buf, PAGE_SIZE, "%c\n", bus->model);
|
|
|
+}
|
|
|
+static DEVICE_ATTR_RO(model);
|
|
|
+
|
|
|
+static ssize_t minor_show(struct device *dev, struct device_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ struct mcb_bus *bus = to_mcb_bus(dev);
|
|
|
+
|
|
|
+ return scnprintf(buf, PAGE_SIZE, "%d\n", bus->minor);
|
|
|
+}
|
|
|
+static DEVICE_ATTR_RO(minor);
|
|
|
+
|
|
|
+static ssize_t name_show(struct device *dev, struct device_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ struct mcb_bus *bus = to_mcb_bus(dev);
|
|
|
+
|
|
|
+ return scnprintf(buf, PAGE_SIZE, "%s\n", bus->name);
|
|
|
+}
|
|
|
+static DEVICE_ATTR_RO(name);
|
|
|
+
|
|
|
+static struct attribute *mcb_bus_attrs[] = {
|
|
|
+ &dev_attr_revision.attr,
|
|
|
+ &dev_attr_model.attr,
|
|
|
+ &dev_attr_minor.attr,
|
|
|
+ &dev_attr_name.attr,
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct attribute_group mcb_carrier_group = {
|
|
|
+ .attrs = mcb_bus_attrs,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct attribute_group *mcb_carrier_groups[] = {
|
|
|
+ &mcb_carrier_group,
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
static struct bus_type mcb_bus_type = {
|
|
|
.name = "mcb",
|
|
|
.match = mcb_match,
|
|
@@ -99,6 +153,11 @@ static struct bus_type mcb_bus_type = {
|
|
|
.shutdown = mcb_shutdown,
|
|
|
};
|
|
|
|
|
|
+static struct device_type mcb_carrier_device_type = {
|
|
|
+ .name = "mcb-carrier",
|
|
|
+ .groups = mcb_carrier_groups,
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* __mcb_register_driver() - Register a @mcb_driver at the system
|
|
|
* @drv: The @mcb_driver
|
|
@@ -205,6 +264,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier)
|
|
|
device_initialize(&bus->dev);
|
|
|
bus->dev.parent = carrier;
|
|
|
bus->dev.bus = &mcb_bus_type;
|
|
|
+ bus->dev.type = &mcb_carrier_device_type;
|
|
|
|
|
|
dev_set_name(&bus->dev, "mcb:%d", bus_nr);
|
|
|
rc = device_add(&bus->dev);
|