+/*
+ * Helper to create a human friendly string describing a part
+ */
+static int efm32x_decode_info(struct efm32_info *info, char *buf, int buf_size)
+{
+ int printed = 0;
+
+ switch (info->part_family) {
+ case EZR_FAMILY_ID_WONDER_GECKO:
+ case EZR_FAMILY_ID_LEOPARD_GECKO:
+ case EZR_FAMILY_ID_HAPPY_GECKO:
+ printed = snprintf(buf, buf_size, "EZR32 ");
+ break;
+ default:
+ printed = snprintf(buf, buf_size, "EFM32 ");
+ }
+
+ buf += printed;
+ buf_size -= printed;
+
+ if (0 >= buf_size)
+ return ERROR_BUF_TOO_SMALL;
+
+ switch (info->part_family) {
+ case EFM_FAMILY_ID_GECKO:
+ printed = snprintf(buf, buf_size, "Gecko");
+ break;
+ case EFM_FAMILY_ID_GIANT_GECKO:
+ printed = snprintf(buf, buf_size, "Giant Gecko");
+ break;
+ case EFM_FAMILY_ID_TINY_GECKO:
+ printed = snprintf(buf, buf_size, "Tiny Gecko");
+ break;
+ case EFM_FAMILY_ID_LEOPARD_GECKO:
+ case EZR_FAMILY_ID_LEOPARD_GECKO:
+ printed = snprintf(buf, buf_size, "Leopard Gecko");
+ break;
+ case EFM_FAMILY_ID_WONDER_GECKO:
+ case EZR_FAMILY_ID_WONDER_GECKO:
+ printed = snprintf(buf, buf_size, "Wonder Gecko");
+ break;
+ case EFM_FAMILY_ID_ZERO_GECKO:
+ printed = snprintf(buf, buf_size, "Zero Gecko");
+ break;
+ case EFM_FAMILY_ID_HAPPY_GECKO:
+ case EZR_FAMILY_ID_HAPPY_GECKO:
+ printed = snprintf(buf, buf_size, "Happy Gecko");
+ break;
+ }
+
+ buf += printed;
+ buf_size -= printed;
+
+ if (0 >= buf_size)
+ return ERROR_BUF_TOO_SMALL;
+
+ printed = snprintf(buf, buf_size, " - Rev: %d", info->prod_rev);
+ buf += printed;
+ buf_size -= printed;
+
+ if (0 >= buf_size)
+ return ERROR_BUF_TOO_SMALL;
+
+ return ERROR_OK;
+}
+