@@ -345,6 +345,16 @@ static u32 spwr_notify_bat(struct ssam_event_notifier *nf, const struct ssam_eve
345
345
struct spwr_battery_device * bat = container_of (nf , struct spwr_battery_device , notif );
346
346
int status ;
347
347
348
+ /*
349
+ * We cannot use strict matching when registering the notifier as the
350
+ * EC expects us to register it against instance ID 0. Strict matching
351
+ * would thus drop events, as those may have non-zero instance IDs in
352
+ * this subsystem. So we need to check the instance ID of the event
353
+ * here manually.
354
+ */
355
+ if (event -> instance_id != bat -> sdev -> uid .instance )
356
+ return 0 ;
357
+
348
358
dev_dbg (& bat -> sdev -> dev , "power event (cid = %#04x, iid = %#04x, tid = %#04x)\n" ,
349
359
event -> command_id , event -> instance_id , event -> target_id );
350
360
@@ -720,8 +730,8 @@ static void spwr_battery_init(struct spwr_battery_device *bat, struct ssam_devic
720
730
bat -> notif .base .fn = spwr_notify_bat ;
721
731
bat -> notif .event .reg = registry ;
722
732
bat -> notif .event .id .target_category = sdev -> uid .category ;
723
- bat -> notif .event .id .instance = 0 ;
724
- bat -> notif .event .mask = SSAM_EVENT_MASK_STRICT ;
733
+ bat -> notif .event .id .instance = 0 ; /* need to register with instance 0 */
734
+ bat -> notif .event .mask = SSAM_EVENT_MASK_TARGET ;
725
735
bat -> notif .event .flags = SSAM_EVENT_SEQUENCED ;
726
736
727
737
bat -> psy_desc .name = bat -> name ;
0 commit comments