trivial: Show why more devices are not marked as updatable

This commit is contained in:
Richard Hughes 2022-01-12 09:46:16 +00:00
parent f56eec47b4
commit 73f6767d87
11 changed files with 23 additions and 49 deletions

View File

@ -59,20 +59,3 @@ fu_dell_dock_will_replug(FuDevice *device)
fu_device_set_remove_delay(device, timeout * 1000); fu_device_set_remove_delay(device, timeout * 1000);
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG); fu_device_add_flag(device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG);
} }
void
fu_dell_dock_clone_updatable(FuDevice *device)
{
FuDevice *parent;
parent = fu_device_get_parent(device);
if (parent == NULL)
return;
if (fu_device_has_flag(parent, FWUPD_DEVICE_FLAG_UPDATABLE)) {
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_UPDATABLE);
} else {
const gchar *message = fu_device_get_update_error(parent);
if (message != NULL)
fu_device_set_update_error(device, message);
fu_device_remove_flag(device, FWUPD_DEVICE_FLAG_UPDATABLE);
}
}

View File

@ -49,5 +49,3 @@ gboolean
fu_dell_dock_set_power(FuDevice *device, guint8 target, gboolean enabled, GError **error); fu_dell_dock_set_power(FuDevice *device, guint8 target, gboolean enabled, GError **error);
void void
fu_dell_dock_will_replug(FuDevice *device); fu_dell_dock_will_replug(FuDevice *device);
void
fu_dell_dock_clone_updatable(FuDevice *device);

View File

@ -197,6 +197,7 @@ fu_dell_dock_hub_set_progress(FuDevice *self, FuProgress *progress)
static void static void
fu_dell_dock_hub_init(FuDellDockHub *self) fu_dell_dock_hub_init(FuDellDockHub *self)
{ {
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
fu_device_retry_set_delay(FU_DEVICE(self), 1000); fu_device_retry_set_delay(FU_DEVICE(self), 1000);
fu_device_register_private_flag(FU_DEVICE(self), fu_device_register_private_flag(FU_DEVICE(self),
FU_DELL_DOCK_HUB_FLAG_HAS_BRIDGE, FU_DELL_DOCK_HUB_FLAG_HAS_BRIDGE,

View File

@ -579,17 +579,16 @@ fu_dell_dock_ec_get_dock_data(FuDevice *device, GError **error)
if (self->data->board_id >= self->board_min) { if (self->data->board_id >= self->board_min) {
if (status != FW_UPDATE_IN_PROGRESS) { if (status != FW_UPDATE_IN_PROGRESS) {
fu_dell_dock_ec_set_board(device); fu_dell_dock_ec_set_board(device);
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_UPDATABLE); fu_device_uninhibit(device, "update-pending");
} else { } else {
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_NEEDS_ACTIVATION); fu_device_add_flag(device, FWUPD_DEVICE_FLAG_NEEDS_ACTIVATION);
fu_device_set_update_error(device, fu_device_inhibit(device,
"A pending update will be completed " "update-pending",
"next time the dock is " "A pending update will be completed next time the dock "
"unplugged from your computer"); "is unplugged from your computer");
} }
} else { } else {
g_warning("This utility does not support this board, disabling updates for %s", fu_device_inhibit(device, "not-supported", "Utility does not support this board");
fu_device_get_name(device));
} }
return TRUE; return TRUE;
@ -1014,6 +1013,8 @@ fu_dell_dock_ec_init(FuDellDockEc *self)
self->data = g_new0(FuDellDockDockDataStructure, 1); self->data = g_new0(FuDellDockDockDataStructure, 1);
self->raw_versions = g_new0(FuDellDockDockPackageFWVersion, 1); self->raw_versions = g_new0(FuDellDockDockPackageFWVersion, 1);
fu_device_add_protocol(FU_DEVICE(self), "com.dell.dock"); fu_device_add_protocol(FU_DEVICE(self), "com.dell.dock");
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
fu_device_add_internal_flag(FU_DEVICE(self), FU_DEVICE_INTERNAL_FLAG_INHIBIT_CHILDREN);
} }
static void static void

View File

@ -1153,8 +1153,6 @@ fu_dell_dock_mst_setup(FuDevice *device, GError **error)
fu_device_set_version(device, version); fu_device_set_version(device, version);
} }
fu_dell_dock_clone_updatable(device);
return TRUE; return TRUE;
} }
@ -1237,6 +1235,7 @@ static void
fu_dell_dock_mst_init(FuDellDockMst *self) fu_dell_dock_mst_init(FuDellDockMst *self)
{ {
fu_device_add_protocol(FU_DEVICE(self), "com.synaptics.mst"); fu_device_add_protocol(FU_DEVICE(self), "com.synaptics.mst");
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
} }
static void static void

View File

@ -215,8 +215,6 @@ fu_dell_dock_tbt_setup(FuDevice *device, GError **error)
return TRUE; return TRUE;
} }
fu_dell_dock_clone_updatable(device);
return TRUE; return TRUE;
} }
@ -275,6 +273,7 @@ static void
fu_dell_dock_tbt_init(FuDellDockTbt *self) fu_dell_dock_tbt_init(FuDellDockTbt *self)
{ {
fu_device_add_protocol(FU_DEVICE(self), "com.intel.thunderbolt"); fu_device_add_protocol(FU_DEVICE(self), "com.intel.thunderbolt");
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
} }
static void static void

View File

@ -51,9 +51,6 @@ fu_dell_dock_status_setup(FuDevice *device, GError **error)
fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_QUAD); fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_QUAD);
fu_device_set_version(device, dynamic_version); fu_device_set_version(device, dynamic_version);
fu_device_set_logical_id(FU_DEVICE(device), "status"); fu_device_set_logical_id(FU_DEVICE(device), "status");
fu_dell_dock_clone_updatable(device);
return TRUE; return TRUE;
} }
@ -160,6 +157,7 @@ static void
fu_dell_dock_status_init(FuDellDockStatus *self) fu_dell_dock_status_init(FuDellDockStatus *self)
{ {
fu_device_add_protocol(FU_DEVICE(self), "com.dell.dock"); fu_device_add_protocol(FU_DEVICE(self), "com.dell.dock");
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
} }
static void static void

View File

@ -575,9 +575,6 @@ fu_dell_dock_usb4_probe(FuDevice *device, GError **error)
self->intf_nr = GR_USB_INTERFACE_NUMBER; self->intf_nr = GR_USB_INTERFACE_NUMBER;
self->blocksz = GR_USB_BLOCK_SIZE; self->blocksz = GR_USB_BLOCK_SIZE;
fu_device_set_logical_id(FU_DEVICE(device), "usb4"); fu_device_set_logical_id(FU_DEVICE(device), "usb4");
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_USABLE_DURING_UPDATE);
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_UPDATABLE);
fu_device_add_internal_flag(FU_DEVICE(self), FU_DEVICE_INTERNAL_FLAG_INHERIT_ACTIVATION);
return TRUE; return TRUE;
} }
@ -591,6 +588,9 @@ static void
fu_dell_dock_usb4_init(FuDellDockUsb4 *self) fu_dell_dock_usb4_init(FuDellDockUsb4 *self)
{ {
fu_device_add_protocol(FU_DEVICE(self), "com.intel.thunderbolt"); fu_device_add_protocol(FU_DEVICE(self), "com.intel.thunderbolt");
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_USABLE_DURING_UPDATE);
fu_device_add_flag(FU_DEVICE(self), FWUPD_DEVICE_FLAG_UPDATABLE);
fu_device_add_internal_flag(FU_DEVICE(self), FU_DEVICE_INTERNAL_FLAG_INHERIT_ACTIVATION);
} }
static void static void

View File

@ -183,9 +183,6 @@ fu_plugin_dell_dock_backend_device_added(FuPlugin *plugin, FuDevice *device, GEr
fu_plugin_device_add(plugin, FU_DEVICE(hub)); fu_plugin_device_add(plugin, FU_DEVICE(hub));
/* clear updatable flag if parent doesn't have it */
fu_dell_dock_clone_updatable(FU_DEVICE(hub));
return TRUE; return TRUE;
} }
@ -233,12 +230,6 @@ fu_plugin_dell_dock_device_registered(FuPlugin *plugin, FuDevice *device)
if (g_strcmp0(fu_device_get_plugin(device), "dell_dock") == 0 && if (g_strcmp0(fu_device_get_plugin(device), "dell_dock") == 0 &&
(FU_IS_DELL_DOCK_EC(device) || FU_IS_DELL_DOCK_USB4(device))) (FU_IS_DELL_DOCK_EC(device) || FU_IS_DELL_DOCK_USB4(device)))
fu_plugin_dell_dock_separate_activation(plugin); fu_plugin_dell_dock_separate_activation(plugin);
if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") != 0 ||
fu_device_has_flag(device, FWUPD_DEVICE_FLAG_INTERNAL))
return;
/* clone updatable flag to leave in needs activation state */
fu_dell_dock_clone_updatable(device);
} }
static gboolean static gboolean

View File

@ -637,7 +637,7 @@ fu_plugin_uefi_capsule_unlock(FuPlugin *plugin, FuDevice *device, GError **error
/* clone the info from real device but prevent it from being flashed */ /* clone the info from real device but prevent it from being flashed */
device_flags_alt = fu_device_get_flags(device_alt); device_flags_alt = fu_device_get_flags(device_alt);
fu_device_set_flags(device, device_flags_alt); fu_device_set_flags(device, device_flags_alt);
fu_device_remove_flag(device_alt, FWUPD_DEVICE_FLAG_UPDATABLE); fu_device_inhibit(device_alt, "alt-device", "Preventing upgrades as alternate");
/* make sure that this unlocked device can be updated */ /* make sure that this unlocked device can be updated */
fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_QUAD); fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_QUAD);

View File

@ -434,9 +434,6 @@ fu_device_list_device_delayed_remove_cb(gpointer user_data)
static void static void
fu_device_list_remove_with_delay(FuDeviceItem *item) fu_device_list_remove_with_delay(FuDeviceItem *item)
{ {
/* we can't do anything with an unconnected device */
fu_device_remove_flag(item->device, FWUPD_DEVICE_FLAG_UPDATABLE);
/* give the hardware time to re-enumerate or the user time to /* give the hardware time to re-enumerate or the user time to
* re-insert the device with a magic button pressed */ * re-insert the device with a magic button pressed */
g_debug("waiting %ums for %s device removal", g_debug("waiting %ums for %s device removal",
@ -478,6 +475,9 @@ fu_device_list_remove(FuDeviceList *self, FuDevice *device)
return; return;
} }
/* we can't do anything with an unconnected device */
fu_device_inhibit(item->device, "unconnected", "Device has been removed");
/* ensure never fired if the remove delay is changed */ /* ensure never fired if the remove delay is changed */
if (item->remove_id > 0) { if (item->remove_id > 0) {
g_source_remove(item->remove_id); g_source_remove(item->remove_id);
@ -584,6 +584,7 @@ fu_device_list_clear_wait_for_replug(FuDeviceList *self, FuDeviceItem *item)
fu_device_remove_flag(item->device_old, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG); fu_device_remove_flag(item->device_old, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG);
} }
} }
fu_device_uninhibit(item->device, "unconnected");
/* optional debug */ /* optional debug */
if (g_getenv("FWUPD_DEVICE_LIST_VERBOSE") != NULL) { if (g_getenv("FWUPD_DEVICE_LIST_VERBOSE") != NULL) {
@ -747,6 +748,7 @@ fu_device_list_add(FuDeviceList *self, FuDevice *device)
/* same ID, different object */ /* same ID, different object */
g_debug("found existing device %s, reusing item", fu_device_get_id(item->device)); g_debug("found existing device %s, reusing item", fu_device_get_id(item->device));
fu_device_list_replace(self, item, device); fu_device_list_replace(self, item, device);
fu_device_uninhibit(device, "unconnected");
return; return;
} }
@ -761,6 +763,7 @@ fu_device_list_add(FuDeviceList *self, FuDevice *device)
fu_device_get_plugin(item->device), fu_device_get_plugin(item->device),
fu_device_get_plugin(device)); fu_device_get_plugin(device));
fu_device_list_replace(self, item, device); fu_device_list_replace(self, item, device);
fu_device_uninhibit(device, "unconnected");
return; return;
} }
@ -775,6 +778,7 @@ fu_device_list_add(FuDeviceList *self, FuDevice *device)
fu_device_get_plugin(item->device), fu_device_get_plugin(item->device),
fu_device_get_plugin(device)); fu_device_get_plugin(device));
fu_device_list_replace(self, item, device); fu_device_list_replace(self, item, device);
fu_device_uninhibit(device, "unconnected");
return; return;
} else { } else {
g_debug("not adding matching %s for device add, use " g_debug("not adding matching %s for device add, use "