return ret;
 }
 
+static u64 ucsi_get_supported_notifications(struct ucsi *ucsi)
+{
+       u8 features = ucsi->cap.features;
+       u64 ntfy = UCSI_ENABLE_NTFY_ALL;
+
+       if (!(features & UCSI_CAP_ALT_MODE_DETAILS))
+               ntfy &= ~UCSI_ENABLE_NTFY_CAM_CHANGE;
+
+       if (!(features & UCSI_CAP_PDO_DETAILS))
+               ntfy &= ~(UCSI_ENABLE_NTFY_PWR_LEVEL_CHANGE |
+                         UCSI_ENABLE_NTFY_CAP_CHANGE);
+
+       if (!(features & UCSI_CAP_EXT_SUPPLY_NOTIFICATIONS))
+               ntfy &= ~UCSI_ENABLE_NTFY_EXT_PWR_SRC_CHANGE;
+
+       if (!(features & UCSI_CAP_PD_RESET))
+               ntfy &= ~UCSI_ENABLE_NTFY_PD_RESET_COMPLETE;
+
+       return ntfy;
+}
+
 /**
  * ucsi_init - Initialize UCSI interface
  * @ucsi: UCSI to be initialized
                        goto err_unregister;
        }
 
-       /* Enable all notifications */
-       ntfy = UCSI_ENABLE_NTFY_ALL;
+       /* Enable all supported notifications */
+       ntfy = ucsi_get_supported_notifications(ucsi);
        command = UCSI_SET_NOTIFICATION_ENABLE | ntfy;
        ret = ucsi_send_command(ucsi, command, NULL, 0);
        if (ret < 0)