diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c
index 5868c6b..ff240e5 100644
--- a/drivers/watchdog/sp5100_tco.c
+++ b/drivers/watchdog/sp5100_tco.c
@@ -326,7 +326,7 @@ static u8 sp5100_tco_read_pm_reg32(u8 index)
 /*
  * Init & exit routines
  */
-static int sp5100_tco_setupdevice(void)
+static int sp5100_tco_setupdevice(struct device *dev)
 {
 	const char *dev_name = NULL;
 	u32 val;
@@ -347,8 +347,8 @@ static int sp5100_tco_setupdevice(void)
 	/* Request the IO ports used by this driver */
 	if (!request_muxed_region(SP5100_IO_PM_INDEX_REG,
 				  SP5100_PM_IOPORTS_SIZE, dev_name)) {
-		pr_err("I/O address 0x%04x already in use\n",
-		       SP5100_IO_PM_INDEX_REG);
+		dev_err(dev, "I/O address 0x%04x already in use\n",
+			SP5100_IO_PM_INDEX_REG);
 		return -EBUSY;
 	}
 
@@ -358,12 +358,12 @@ static int sp5100_tco_setupdevice(void)
 	 */
 	val = sp5100_tco_read_pm_reg32(base_addr) & 0xfffffff8;
 
-	pr_debug("Got 0x%04x from indirect I/O\n", val);
+	dev_dbg(dev, "Got 0x%04x from indirect I/O\n", val);
 
 	/* Check MMIO address conflict */
 	if (!request_mem_region_exclusive(val, SP5100_WDT_MEM_MAP_SIZE,
 					  dev_name)) {
-		pr_debug("MMIO address 0x%04x already in use\n", val);
+		dev_dbg(dev, "MMIO address 0x%04x already in use\n", val);
 		/*
 		 * Secondly, Find the watchdog timer MMIO address
 		 * from SBResource_MMIO register.
@@ -381,7 +381,8 @@ static int sp5100_tco_setupdevice(void)
 		/* The SBResource_MMIO is enabled and mapped memory space? */
 		if ((val & (SB800_ACPI_MMIO_DECODE_EN | SB800_ACPI_MMIO_SEL)) !=
 						  SB800_ACPI_MMIO_DECODE_EN) {
-			pr_notice("failed to find MMIO address, giving up.\n");
+			dev_notice(dev,
+				   "failed to find MMIO address, giving up.\n");
 			ret = -ENODEV;
 			goto unreg_region;
 		}
@@ -392,23 +393,24 @@ static int sp5100_tco_setupdevice(void)
 		/* Check MMIO address conflict */
 		if (!request_mem_region_exclusive(val, SP5100_WDT_MEM_MAP_SIZE,
 						  dev_name)) {
-			pr_debug("MMIO address 0x%04x already in use\n", val);
+			dev_dbg(dev, "MMIO address 0x%04x already in use\n",
+				val);
 			ret = -EBUSY;
 			goto unreg_region;
 		}
-		pr_debug("Got 0x%04x from SBResource_MMIO register\n", val);
+		dev_dbg(dev, "Got 0x%04x from SBResource_MMIO register\n", val);
 	}
 
 	tcobase_phys = val;
 
 	tcobase = ioremap(val, SP5100_WDT_MEM_MAP_SIZE);
 	if (!tcobase) {
-		pr_err("failed to get tcobase address\n");
+		dev_err(dev, "failed to get tcobase address\n");
 		ret = -ENOMEM;
 		goto unreg_mem_region;
 	}
 
-	pr_info("Using 0x%04x for watchdog MMIO address\n", val);
+	dev_info(dev, "Using 0x%04x for watchdog MMIO address\n", val);
 
 	/* Setup the watchdog timer */
 	tco_timer_enable();
@@ -443,21 +445,22 @@ static int sp5100_tco_setupdevice(void)
 	return ret;
 }
 
-static int sp5100_tco_init(struct platform_device *dev)
+static int sp5100_tco_init(struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
 	int ret;
 
 	/*
 	 * Check whether or not the hardware watchdog is there. If found, then
 	 * set it up.
 	 */
-	ret = sp5100_tco_setupdevice();
+	ret = sp5100_tco_setupdevice(dev);
 	if (ret)
 		return ret;
 
 	/* Check to see if last reboot was due to watchdog timeout */
-	pr_info("Last reboot was %striggered by watchdog.\n",
-		tco_wdt_fired ? "" : "not ");
+	dev_info(dev, "Last reboot was %striggered by watchdog.\n",
+		 tco_wdt_fired ? "" : "not ");
 
 	/*
 	 * Check that the heartbeat value is within it's range.
@@ -470,16 +473,16 @@ static int sp5100_tco_init(struct platform_device *dev)
 
 	ret = misc_register(&sp5100_tco_miscdev);
 	if (ret != 0) {
-		pr_err("cannot register miscdev on minor=%d (err=%d)\n",
-		       WATCHDOG_MINOR, ret);
+		dev_err(dev, "cannot register miscdev on minor=%d (err=%d)\n",
+			WATCHDOG_MINOR, ret);
 		goto exit;
 	}
 
 	clear_bit(0, &timer_alive);
 
 	/* Show module parameters */
-	pr_info("initialized (0x%p). heartbeat=%d sec (nowayout=%d)\n",
-		tcobase, heartbeat, nowayout);
+	dev_info(dev, "initialized (0x%p). heartbeat=%d sec (nowayout=%d)\n",
+		 tcobase, heartbeat, nowayout);
 
 	return 0;
 
@@ -581,7 +584,6 @@ static void __exit sp5100_tco_cleanup_module(void)
 {
 	platform_device_unregister(sp5100_tco_platform_device);
 	platform_driver_unregister(&sp5100_tco_driver);
-	pr_info("SP5100/SB800 TCO Watchdog Module Unloaded\n");
 }
 
 module_init(sp5100_tco_init_module);
