diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index f4437535..886f30cf 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -301,7 +301,7 @@ class FeaturesArray(dict): feature = self.inverse.get(index) if feature is not None: return feature - # Sub-device index; bridge unwrap offsets by 0x100 (see listener). + # Sub-device index; bridge unwrap offsets by 0x100 (see listener). if index >= 0x100: return self.sub_inverse.get(index - 0x100) elif self._check(): diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py index ad1c5786..76e00e08 100644 --- a/lib/logitech_receiver/settings_templates.py +++ b/lib/logitech_receiver/settings_templates.py @@ -1621,6 +1621,17 @@ class HeadsetMicMute(settings.Setting): feature = _F.HEADSET_MIC_MUTE validator_class = settings_validator.BooleanValidator + @classmethod + def build(cls, device): + # G522 advertises 0x0601 in its FeatureSet but the firmware returns + # 0x0A UNSUPPORTED for both GetState and SetState. The physical mute + # switch doesn't drive this feature anyway — G HUB attempts and + # silently ignores failures. Hide the toggle on G522 PIDs (0x0B18 + # wireless, 0x0B19 wired) so users don't see a permanently-broken UI. + if getattr(device, "product_id", None) in (0x0B18, 0x0B19): + return None + return super().build(device) + class HeadsetMicSNR(settings.Setting): name = "headset-mic-snr"