diff --git a/private/file_contexts b/private/file_contexts
index 241cccdf96feae96113d46f1b716fdd10e6a3e0d..b4a7087547a6156c5ff398089233605a35766c96 100644
--- a/private/file_contexts
+++ b/private/file_contexts
@@ -224,6 +224,7 @@
 /system/bin/hw/android\.hardware\.boot@1\.0-service           u:object_r:hal_boot_exec:s0
 /system/bin/hw/android\.hardware\.light@2\.0-service          u:object_r:hal_light_exec:s0
 /system/bin/hw/android\.hardware\.nfc@1\.0-service            u:object_r:hal_nfc_exec:s0
+/system/bin/hw/android\.hardware\.power@1\.0-service          u:object_r:hal_power_exec:s0
 /system/bin/hw/android\.hardware\.vibrator@1\.0-service       u:object_r:hal_vibrator_exec:s0
 /system/bin/hw/android\.hardware\.vr@1\.0-service             u:object_r:hal_vr_exec:s0
 /system/bin/hw/android\.hardware\.wifi@1\.0-service           u:object_r:hal_wifi_exec:s0
diff --git a/private/hal_power.te b/private/hal_power.te
new file mode 100644
index 0000000000000000000000000000000000000000..a564d402cffd0e3e85d4daf25ca3f6125cded9e7
--- /dev/null
+++ b/private/hal_power.te
@@ -0,0 +1,2 @@
+# may be started by init
+init_daemon_domain(hal_power)
diff --git a/public/hal_power.te b/public/hal_power.te
new file mode 100644
index 0000000000000000000000000000000000000000..26fec3b59e258da069738213965758da5d04bc13
--- /dev/null
+++ b/public/hal_power.te
@@ -0,0 +1,6 @@
+# power subsystem
+type hal_power, domain;
+type hal_power_exec, exec_type, file_type;
+
+# hwbinder access
+hwbinder_use(hal_power);
diff --git a/public/system_server.te b/public/system_server.te
index a728c15a73b58d21d532a50ade019668db767f52..6bec0aa0f25534de9b3c35b2bee1e91607a57a3f 100644
--- a/public/system_server.te
+++ b/public/system_server.te
@@ -149,6 +149,7 @@ allow system_server surfaceflinger:unix_stream_socket { read write setopt };
 binder_use(system_server)
 binder_call(system_server, hal_boot)
 binder_call(system_server, hal_light)
+binder_call(system_server, hal_power)
 binder_call(system_server, hal_vibrator)
 binder_call(system_server, hal_vr)
 binder_call(system_server, binderservicedomain)