diff --git a/cmd/Kconfig b/cmd/Kconfig
index 2caa4af7..88454043 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1410,6 +1410,11 @@ config CMD_POWEROFF
 	help
 	  Poweroff/Shutdown the system
 
+config CMD_POWEROFF_BBB
+    bool "Custom BeagleBone Power-Off"
+    help
+      Power off the board using the PMIC over I2C.
+
 config CMD_READ
 	bool "read - Read binary data from a partition"
 	help
diff --git a/cmd/Makefile b/cmd/Makefile
index 36d2daf2..53e04070 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -211,6 +211,7 @@ obj-$(CONFIG_CMD_PVBLOCK) += pvblock.o
 # Power
 obj-$(CONFIG_CMD_PMIC) += pmic.o
 obj-$(CONFIG_CMD_REGULATOR) += regulator.o
+obj-$(CONFIG_CMD_POWEROFF_BBB) += poweroff_beaglebone.o
 
 obj-$(CONFIG_CMD_BLOB) += blob.o
 
diff --git a/cmd/pmic.c b/cmd/pmic.c
index 49a405fa..2b338aa1 100644
--- a/cmd/pmic.c
+++ b/cmd/pmic.c
@@ -41,7 +41,8 @@ static int do_dev(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return CMD_RET_USAGE;
 		}
 
-		printf("dev: %d @ %s\n", dev_seq(currdev), currdev->name);
+		if ((strcmp("tps@24", currdev->name)))
+			printf("dev: %d @ %s\n", dev_seq(currdev), currdev->name);
 	}
 
 	return CMD_RET_SUCCESS;
diff --git a/cmd/poweroff_beaglebone.c b/cmd/poweroff_beaglebone.c
new file mode 100644
index 00000000..758246bb
--- /dev/null
+++ b/cmd/poweroff_beaglebone.c
@@ -0,0 +1,35 @@
+#include <common.h>
+#include <command.h>
+#include <linux/delay.h>
+#include <irq_func.h>
+
+int do_poweroff(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+    /* Print a message indicating shutdown is in progress */
+    printf("Powering off...\n");
+
+    /* Directly execute the one-line pmic command */
+    const char *poweroff_cmd = "pmic dev tps@24; pmic write 0x0A 0x80; pmic write 0x0B 0x6B; pmic write 0x16 0x02";
+    int ret = run_command(poweroff_cmd, 0);
+
+    if (ret) {
+        printf("Power-off command failed: %d\n", ret);
+        return CMD_RET_FAILURE;
+    }
+
+    /* Delay to ensure the PMIC has time to process the shutdown */
+    udelay(50000);  // 50 ms delay
+
+    /* Disable interrupts and halt if shutdown fails */
+    disable_interrupts();
+    printf("Power-off command failed.\n");
+
+    return CMD_RET_FAILURE;  // Should not return if power-off is successful
+}
+
+/* Register the command */
+U_BOOT_CMD(
+    poweroff, 1, 0, do_poweroff,
+    "Power off the board using PMIC",
+    ""
+);
\ No newline at end of file
diff --git a/configs/am335x_evm_defconfig b/configs/am335x_evm_defconfig
index e8833646..fdbf6fac 100644
--- a/configs/am335x_evm_defconfig
+++ b/configs/am335x_evm_defconfig
@@ -125,3 +125,5 @@ CONFIG_WDT=y
 CONFIG_DYNAMIC_CRC_TABLE=y
 CONFIG_RSA=y
 CONFIG_LZO=y
+CONFIG_CMD_PMIC=y
+CONFIG_CMD_POWEROFF_BBB=y
diff --git a/drivers/power/pmic/pmic_tps65217.c b/drivers/power/pmic/pmic_tps65217.c
index ccbf2235..2a630f5d 100644
--- a/drivers/power/pmic/pmic_tps65217.c
+++ b/drivers/power/pmic/pmic_tps65217.c
@@ -175,6 +175,11 @@ static int tps65217_write(struct udevice *dev, uint reg, const uint8_t *buff,
 	return 0;
 }
 
+int tps65217_dm_write(struct udevice *dev, uint reg, const uint8_t *buff, int len)
+{
+    return tps65217_write(dev, reg, buff, len);
+}
+
 static int tps65217_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 {
 	int ret;
@@ -189,6 +194,11 @@ static int tps65217_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 	return 0;
 }
 
+int tps65217_dm_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
+{
+    return tps65217_read(dev, reg, buff, len);
+}
+
 static int tps65217_bind(struct udevice *dev)
 {
 	ofnode regulators_node;
diff --git a/include/power/tps65217.h b/include/power/tps65217.h
index 669a94a6..5840b7f2 100644
--- a/include/power/tps65217.h
+++ b/include/power/tps65217.h
@@ -83,7 +83,9 @@ enum {
 int power_tps65217_init(unsigned char bus);
 
 int tps65217_reg_read(uchar src_reg, uchar *src_val);
+int tps65217_dm_read(struct udevice *dev, uint reg, uint8_t *buff, int len);
 int tps65217_reg_write(uchar prot_level, uchar dest_reg, uchar dest_val,
 		       uchar mask);
+int tps65217_dm_write(struct udevice *dev, uint reg, const uint8_t *buff, int len);
 int tps65217_voltage_update(uchar dc_cntrl_reg, uchar volt_sel);
 #endif	/* __POWER_TPS65217_H__ */
