+enum {
+ DATA_MODE,
+ DATA_MSG,
+ DATA_MSG2,
+ DATA_MSG3,
+ __DATA_MAX
+};
+
+static void handle_generic(struct usbdev_data *data, struct blob_attr **tb)
+{
+ fprintf(stderr, "Do generic switch!\n");
+}
+
+static void handle_huawei(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_sierra(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_sony(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_qisda(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_gct(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_kobil(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_sequans(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_mobile_action(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+static void handle_cisco(struct usbdev_data *data, struct blob_attr **tb)
+{
+ /* TODO */
+}
+
+enum {
+ MODE_GENERIC,
+ MODE_HUAWEI,
+ MODE_SIERRA,
+ MODE_SONY,
+ MODE_QISDA,
+ MODE_GCT,
+ MODE_KOBIL,
+ MODE_SEQUANS,
+ MODE_MOBILE_ACTION,
+ MODE_CISCO,
+ __MODE_MAX
+};
+
+static const struct {
+ const char *name;
+ void (*cb)(struct usbdev_data *data, struct blob_attr **tb);
+} modeswitch_cb[__MODE_MAX] = {
+ [MODE_GENERIC] = { "Generic", handle_generic },
+ [MODE_HUAWEI] = { "Huawei", handle_huawei },
+ [MODE_SIERRA] = { "Sierra", handle_sierra },
+ [MODE_SONY] = { "Sony", handle_sony },
+ [MODE_QISDA] = { "Qisda", handle_qisda },
+ [MODE_GCT] = { "GCT", handle_gct },
+ [MODE_KOBIL] = { "Kobil", handle_kobil },
+ [MODE_SEQUANS] = { "Sequans", handle_sequans },
+ [MODE_MOBILE_ACTION] = { "MobileAction", handle_mobile_action },
+ [MODE_CISCO] = { "Cisco", handle_cisco },
+};
+