Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwif...
[cascardo/linux.git] / drivers / fmc / fmc-core.c
index 24d5249..353fc54 100644 (file)
@@ -99,10 +99,23 @@ static ssize_t fmc_read_eeprom(struct file *file, struct kobject *kobj,
        return count;
 }
 
+static ssize_t fmc_write_eeprom(struct file *file, struct kobject *kobj,
+                               struct bin_attribute *bin_attr,
+                               char *buf, loff_t off, size_t count)
+{
+       struct device *dev;
+       struct fmc_device *fmc;
+
+       dev = container_of(kobj, struct device, kobj);
+       fmc = container_of(dev, struct fmc_device, dev);
+       return fmc->op->write_ee(fmc, off, buf, count);
+}
+
 static struct bin_attribute fmc_eeprom_attr = {
-       .attr = { .name = "eeprom", .mode = S_IRUGO, },
+       .attr = { .name = "eeprom", .mode = S_IRUGO | S_IWUSR, },
        .size = 8192, /* more or less standard */
        .read = fmc_read_eeprom,
+       .write = fmc_write_eeprom,
 };
 
 /*
@@ -154,7 +167,7 @@ int fmc_device_register_n(struct fmc_device **devs, int n)
                        ret = -EINVAL;
                        break;
                }
-               if (fmc->flags == FMC_DEVICE_NO_MEZZANINE) {
+               if (fmc->flags & FMC_DEVICE_NO_MEZZANINE) {
                        dev_info(fmc->hwdev, "absent mezzanine in slot %d\n",
                                 fmc->slot_id);
                        continue;
@@ -189,9 +202,6 @@ int fmc_device_register_n(struct fmc_device **devs, int n)
        for (i = 0; i < n; i++) {
                fmc = devarray[i];
 
-               if (fmc->flags == FMC_DEVICE_NO_MEZZANINE)
-                       continue; /* dev_info already done above */
-
                fmc->nr_slots = n; /* each slot must know how many are there */
                fmc->devarray = devarray;
 
@@ -263,8 +273,6 @@ void fmc_device_unregister_n(struct fmc_device **devs, int n)
        kfree(devs[0]->devarray);
 
        for (i = 0; i < n; i++) {
-               if (devs[i]->flags == FMC_DEVICE_NO_MEZZANINE)
-                       continue;
                sysfs_remove_bin_file(&devs[i]->dev.kobj, &fmc_eeprom_attr);
                device_del(&devs[i]->dev);
                fmc_free_id_info(devs[i]);