opaque: Use bus probing
Change-Id: I94f6f99144f28259efa358ed4d9fe82bd51c30b7
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.sourcearcade.org/c/flashprog/+/450
diff --git a/opaque.c b/opaque.c
index a005d91..7a11b90 100644
--- a/opaque.c
+++ b/opaque.c
@@ -21,14 +21,30 @@
*/
#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "flash.h"
#include "flashchips.h"
#include "chipdrivers/opaque.h"
+#include "chipdrivers/probing.h"
#include "programmer.h"
-int probe_opaque(struct flashctx *flash)
+struct found_id *probe_opaque(const struct bus_probe *probe,
+ const struct master_common *mst,
+ const struct flashchip *chip)
{
- return 1;
+ struct found_id *const found = calloc(1, sizeof(*found));
+ if (!found) {
+ msg_cerr("Out of memory!\n");
+ return NULL;
+ }
+
+ found->info.id.type = ID_OPAQUE;
+ found->info.id.manufacture = PROGMANUF_ID;
+ found->info.id.model = PROGDEV_ID;
+
+ return found;
}
int prepare_opaque(struct flashctx *flash, enum preparation_steps step)
@@ -53,6 +69,16 @@
return flash->mst.opaque->erase(flash, blockaddr, blocklen);
}
+static const struct bus_probe opaque_probes[] = {
+ /* prio. type function function argument */
+ { 0, ID_OPAQUE, probe_opaque, NULL },
+};
+
+static bool opaque_probe_match(const struct flashchip *chip, const struct id_info_ext *found)
+{
+ return memcmp(&chip->id, &found->id, sizeof(found->id)) == 0;
+}
+
int register_opaque_master(const struct opaque_master *mst, void *data)
{
struct registered_master rmst = { 0 };
@@ -71,6 +97,9 @@
return ERROR_FLASHPROG_BUG;
}
rmst.buses_supported = BUS_PROG;
+ rmst.probing.probe_count = ARRAY_SIZE(opaque_probes);
+ rmst.probing.probes = opaque_probes;
+ rmst.probing.match = opaque_probe_match;
rmst.opaque = *mst;
if (data)
rmst.opaque.data = data;