From 630dac083062c4301e549848d2d5b168656d968f Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 24 Jul 2012 23:00:40 +0200
Subject: [PATCH] spec-fmc: added eeprom methods

---
 kernel/spec-fmc.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/kernel/spec-fmc.c b/kernel/spec-fmc.c
index 239d94b..6ed8c47 100644
--- a/kernel/spec-fmc.c
+++ b/kernel/spec-fmc.c
@@ -72,13 +72,25 @@ static int spec_irq_free(struct fmc_device *fmc)
 	return 0;
 }
 
+/* The engines for this live in spec-i2c.c, we only shape arguments */
+static int spec_read_ee(struct fmc_device *fmc, int pos, void *data, int len)
+{
+	return spec_eeprom_read(fmc, SPEC_I2C_EEPROM_ADDR, pos, data, len);
+}
+
+static int spec_write_ee(struct fmc_device *fmc, int pos, void *data, int len)
+{
+	return spec_eeprom_write(fmc, SPEC_I2C_EEPROM_ADDR, pos, data, len);
+}
+
 static struct fmc_operations spec_fmc_operations = {
 	/* no readl/writel because we have the base pointer */
 	/* FIXME: reprogram */
 	.irq_request =		spec_irq_request,
 	.irq_ack =		spec_irq_ack,
 	.irq_free =		spec_irq_free,
-	/* FIXME: eeprom */
+	.read_ee =		spec_read_ee,
+	.write_ee =		spec_write_ee,
 };
 
 /*
@@ -199,6 +211,7 @@ int spec_fmc_create(struct spec_dev *spec)
 	fmc->base = spec->remap[0] + 0x80000; /* 512k window at 512k offset */
 	fmc->irq = spec->pdev->irq;
 	fmc->op = &spec_fmc_operations;
+	fmc->hwdev = &spec->pdev->dev; /* for messages */
 	spec->fmc = fmc;
 
 	/* Check that the golden binary is actually correct */
-- 
GitLab