diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index d77c230..6a4da417 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -36,19 +36,17 @@
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT		ACPI_BUS_COMPONENT
-ACPI_MODULE_NAME		("acpi_bus")
-
+ACPI_MODULE_NAME("acpi_bus")
 #ifdef	CONFIG_X86
 extern void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger);
 #endif
 
-FADT_DESCRIPTOR			acpi_fadt;
+FADT_DESCRIPTOR acpi_fadt;
 EXPORT_SYMBOL(acpi_fadt);
 
-struct acpi_device		*acpi_root;
-struct proc_dir_entry		*acpi_root_dir;
+struct acpi_device *acpi_root;
+struct proc_dir_entry *acpi_root_dir;
 EXPORT_SYMBOL(acpi_root_dir);
 
 #define STRUCT_TO_INT(s)	(*((int*)&s))
@@ -57,12 +55,9 @@
                                 Device Management
    -------------------------------------------------------------------------- */
 
-int
-acpi_bus_get_device (
-	acpi_handle		handle,
-	struct acpi_device	**device)
+int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
 {
-	acpi_status		status = AE_OK;
+	acpi_status status = AE_OK;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_get_device");
 
@@ -71,24 +66,23 @@
 
 	/* TBD: Support fixed-feature devices */
 
-	status = acpi_get_data(handle, acpi_bus_data_handler, (void**) device);
+	status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
 	if (ACPI_FAILURE(status) || !*device) {
 		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "No context for object [%p]\n",
-			handle));
+				  handle));
 		return_VALUE(-ENODEV);
 	}
 
 	return_VALUE(0);
 }
+
 EXPORT_SYMBOL(acpi_bus_get_device);
 
-int
-acpi_bus_get_status (
-	struct acpi_device	*device)
+int acpi_bus_get_status(struct acpi_device *device)
 {
-	acpi_status		status = AE_OK;
-	unsigned long		sta = 0;
-	
+	acpi_status status = AE_OK;
+	unsigned long sta = 0;
+
 	ACPI_FUNCTION_TRACE("acpi_bus_get_status");
 
 	if (!device)
@@ -98,10 +92,11 @@
 	 * Evaluate _STA if present.
 	 */
 	if (device->flags.dynamic_status) {
-		status = acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
+		status =
+		    acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
 		if (ACPI_FAILURE(status))
 			return_VALUE(-ENODEV);
-		STRUCT_TO_INT(device->status) = (int) sta;
+		STRUCT_TO_INT(device->status) = (int)sta;
 	}
 
 	/*
@@ -115,33 +110,30 @@
 
 	if (device->status.functional && !device->status.present) {
 		printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
-			"functional but not present; setting present\n",
-			device->pnp.bus_id,
-			(u32) STRUCT_TO_INT(device->status));
+		       "functional but not present; setting present\n",
+		       device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status));
 		device->status.present = 1;
 	}
 
-	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n", 
-		device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status)));
+	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
+			  device->pnp.bus_id,
+			  (u32) STRUCT_TO_INT(device->status)));
 
 	return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_bus_get_status);
 
+EXPORT_SYMBOL(acpi_bus_get_status);
 
 /* --------------------------------------------------------------------------
                                  Power Management
    -------------------------------------------------------------------------- */
 
-int
-acpi_bus_get_power (
-	acpi_handle		handle,
-	int			*state)
+int acpi_bus_get_power(acpi_handle handle, int *state)
 {
-	int			result = 0;
-	acpi_status             status = 0;
-	struct acpi_device	*device = NULL;
-	unsigned long		psc = 0;
+	int result = 0;
+	acpi_status status = 0;
+	struct acpi_device *device = NULL;
+	unsigned long psc = 0;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_get_power");
 
@@ -157,20 +149,18 @@
 			*state = device->parent->power.state;
 		else
 			*state = ACPI_STATE_D0;
-	}
-	else {
+	} else {
 		/*
 		 * Get the device's power state either directly (via _PSC) or 
 		 * indirectly (via power resources).
 		 */
 		if (device->power.flags.explicit_get) {
-			status = acpi_evaluate_integer(device->handle, "_PSC", 
-				NULL, &psc);
+			status = acpi_evaluate_integer(device->handle, "_PSC",
+						       NULL, &psc);
 			if (ACPI_FAILURE(status))
 				return_VALUE(-ENODEV);
-			device->power.state = (int) psc;
-		}
-		else if (device->power.flags.power_resources) {
+			device->power.state = (int)psc;
+		} else if (device->power.flags.power_resources) {
 			result = acpi_power_get_inferred_state(device);
 			if (result)
 				return_VALUE(result);
@@ -180,22 +170,19 @@
 	}
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is D%d\n",
-		device->pnp.bus_id, device->power.state));
+			  device->pnp.bus_id, device->power.state));
 
 	return_VALUE(0);
 }
+
 EXPORT_SYMBOL(acpi_bus_get_power);
 
-
-int
-acpi_bus_set_power (
-	acpi_handle		handle,
-	int			state)
+int acpi_bus_set_power(acpi_handle handle, int state)
 {
-	int			result = 0;
-	acpi_status		status = AE_OK;
-	struct acpi_device	*device = NULL;
-	char			object_name[5] = {'_','P','S','0'+state,'\0'};
+	int result = 0;
+	acpi_status status = AE_OK;
+	struct acpi_device *device = NULL;
+	char object_name[5] = { '_', 'P', 'S', '0' + state, '\0' };
 
 	ACPI_FUNCTION_TRACE("acpi_bus_set_power");
 
@@ -209,7 +196,8 @@
 	/* Make sure this is a valid target state */
 
 	if (!device->flags.power_manageable) {
-		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device is not power manageable\n"));
+		ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+				  "Device is not power manageable\n"));
 		return_VALUE(-ENODEV);
 	}
 	/*
@@ -219,15 +207,18 @@
 	if (device->power.state == ACPI_STATE_UNKNOWN)
 		acpi_bus_get_power(device->handle, &device->power.state);
 	if (state == device->power.state) {
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", state));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
+				  state));
 		return_VALUE(0);
 	}
 	if (!device->power.states[state].flags.valid) {
-		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n", state));
+		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n",
+				  state));
 		return_VALUE(-ENODEV);
 	}
 	if (device->parent && (state < device->parent->power.state)) {
-		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Cannot set device to a higher-powered state than parent\n"));
+		ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+				  "Cannot set device to a higher-powered state than parent\n"));
 		return_VALUE(-ENODEV);
 	}
 
@@ -245,18 +236,17 @@
 				goto end;
 		}
 		if (device->power.states[state].flags.explicit_set) {
-			status = acpi_evaluate_object(device->handle, 
-				object_name, NULL, NULL);
+			status = acpi_evaluate_object(device->handle,
+						      object_name, NULL, NULL);
 			if (ACPI_FAILURE(status)) {
 				result = -ENODEV;
 				goto end;
 			}
 		}
-	}
-	else {
+	} else {
 		if (device->power.states[state].flags.explicit_set) {
-			status = acpi_evaluate_object(device->handle, 
-				object_name, NULL, NULL);
+			status = acpi_evaluate_object(device->handle,
+						      object_name, NULL, NULL);
 			if (ACPI_FAILURE(status)) {
 				result = -ENODEV;
 				goto end;
@@ -269,20 +259,21 @@
 		}
 	}
 
-end:
+      end:
 	if (result)
-		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Error transitioning device [%s] to D%d\n",
-			device->pnp.bus_id, state));
+		ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+				  "Error transitioning device [%s] to D%d\n",
+				  device->pnp.bus_id, state));
 	else
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] transitioned to D%d\n",
-			device->pnp.bus_id, state));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Device [%s] transitioned to D%d\n",
+				  device->pnp.bus_id, state));
 
 	return_VALUE(result);
 }
+
 EXPORT_SYMBOL(acpi_bus_set_power);
 
-
-
 /* --------------------------------------------------------------------------
                                 Event Management
    -------------------------------------------------------------------------- */
@@ -292,16 +283,12 @@
 LIST_HEAD(acpi_bus_event_list);
 DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
 
-extern int			event_is_open;
+extern int event_is_open;
 
-int
-acpi_bus_generate_event (
-	struct acpi_device	*device,
-	u8			type,
-	int			data)
+int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
 {
-	struct acpi_bus_event	*event = NULL;
-	unsigned long		flags = 0;
+	struct acpi_bus_event *event = NULL;
+	unsigned long flags = 0;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_generate_event");
 
@@ -329,14 +316,13 @@
 
 	return_VALUE(0);
 }
+
 EXPORT_SYMBOL(acpi_bus_generate_event);
 
-int
-acpi_bus_receive_event (
-	struct acpi_bus_event	*event)
+int acpi_bus_receive_event(struct acpi_bus_event *event)
 {
-	unsigned long		flags = 0;
-	struct acpi_bus_event	*entry = NULL;
+	unsigned long flags = 0;
+	struct acpi_bus_event *entry = NULL;
 
 	DECLARE_WAITQUEUE(wait, current);
 
@@ -361,7 +347,8 @@
 	}
 
 	spin_lock_irqsave(&acpi_bus_event_lock, flags);
-	entry = list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
+	entry =
+	    list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
 	if (entry)
 		list_del(&entry->node);
 	spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
@@ -375,19 +362,17 @@
 
 	return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_bus_receive_event);
 
+EXPORT_SYMBOL(acpi_bus_receive_event);
 
 /* --------------------------------------------------------------------------
                              Notification Handling
    -------------------------------------------------------------------------- */
 
 static int
-acpi_bus_check_device (
-	struct acpi_device	*device,
-	int			*status_changed)
+acpi_bus_check_device(struct acpi_device *device, int *status_changed)
 {
-	acpi_status             status = 0;
+	acpi_status status = 0;
 	struct acpi_device_status old_status;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_check_device");
@@ -422,15 +407,14 @@
 
 	if (status_changed)
 		*status_changed = 1;
-	
+
 	/*
 	 * Device Insertion/Removal
 	 */
 	if ((device->status.present) && !(old_status.present)) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device insertion detected\n"));
 		/* TBD: Handle device insertion */
-	}
-	else if (!(device->status.present) && (old_status.present)) {
+	} else if (!(device->status.present) && (old_status.present)) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device removal detected\n"));
 		/* TBD: Handle device removal */
 	}
@@ -438,13 +422,10 @@
 	return_VALUE(0);
 }
 
-
-static int
-acpi_bus_check_scope (
-	struct acpi_device	*device)
+static int acpi_bus_check_scope(struct acpi_device *device)
 {
-	int			result = 0;
-	int			status_changed = 0;
+	int result = 0;
+	int status_changed = 0;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_check_scope");
 
@@ -467,20 +448,15 @@
 	return_VALUE(0);
 }
 
-
 /**
  * acpi_bus_notify
  * ---------------
  * Callback for all 'system-level' device notifications (values 0x00-0x7F).
  */
-static void 
-acpi_bus_notify (
-	acpi_handle             handle,
-	u32                     type,
-	void                    *data)
+static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
 {
-	int			result = 0;
-	struct acpi_device	*device = NULL;
+	int result = 0;
+	struct acpi_device *device = NULL;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_notify");
 
@@ -490,64 +466,73 @@
 	switch (type) {
 
 	case ACPI_NOTIFY_BUS_CHECK:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received BUS CHECK notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received BUS CHECK notification for device [%s]\n",
+				  device->pnp.bus_id));
 		result = acpi_bus_check_scope(device);
 		/* 
 		 * TBD: We'll need to outsource certain events to non-ACPI
-		 *	drivers via the device manager (device.c).
+		 *      drivers via the device manager (device.c).
 		 */
 		break;
 
 	case ACPI_NOTIFY_DEVICE_CHECK:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE CHECK notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received DEVICE CHECK notification for device [%s]\n",
+				  device->pnp.bus_id));
 		result = acpi_bus_check_device(device, NULL);
 		/* 
 		 * TBD: We'll need to outsource certain events to non-ACPI
-		 *	drivers via the device manager (device.c).
+		 *      drivers via the device manager (device.c).
 		 */
 		break;
 
 	case ACPI_NOTIFY_DEVICE_WAKE:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE WAKE notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received DEVICE WAKE notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_EJECT_REQUEST:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received EJECT REQUEST notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received EJECT REQUEST notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE CHECK LIGHT notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received DEVICE CHECK LIGHT notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD: Exactly what does 'light' mean? */
 		break;
 
 	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received FREQUENCY MISMATCH notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received FREQUENCY MISMATCH notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received BUS MODE MISMATCH notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received BUS MODE MISMATCH notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD */
 		break;
 
 	case ACPI_NOTIFY_POWER_FAULT:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received POWER FAULT notification for device [%s]\n", 
-			device->pnp.bus_id));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received POWER FAULT notification for device [%s]\n",
+				  device->pnp.bus_id));
 		/* TBD */
 		break;
 
 	default:
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received unknown/unsupported notification [%08x]\n", 
-			type));
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+				  "Received unknown/unsupported notification [%08x]\n",
+				  type));
 		break;
 	}
 
@@ -558,13 +543,12 @@
                              Initialization/Cleanup
    -------------------------------------------------------------------------- */
 
-static int __init
-acpi_bus_init_irq (void)
+static int __init acpi_bus_init_irq(void)
 {
-	acpi_status		status = AE_OK;
-	union acpi_object	arg = {ACPI_TYPE_INTEGER};
-	struct acpi_object_list	arg_list = {1, &arg};
-	char			*message = NULL;
+	acpi_status status = AE_OK;
+	union acpi_object arg = { ACPI_TYPE_INTEGER };
+	struct acpi_object_list arg_list = { 1, &arg };
+	char *message = NULL;
 
 	ACPI_FUNCTION_TRACE("acpi_bus_init_irq");
 
@@ -601,12 +585,10 @@
 	return_VALUE(0);
 }
 
-
-void __init
-acpi_early_init (void)
+void __init acpi_early_init(void)
 {
-	acpi_status		status = AE_OK;
-	struct acpi_buffer	buffer = {sizeof(acpi_fadt), &acpi_fadt};
+	acpi_status status = AE_OK;
+	struct acpi_buffer buffer = { sizeof(acpi_fadt), &acpi_fadt };
 
 	ACPI_FUNCTION_TRACE("acpi_early_init");
 
@@ -619,13 +601,15 @@
 
 	status = acpi_initialize_subsystem();
 	if (ACPI_FAILURE(status)) {
-		printk(KERN_ERR PREFIX "Unable to initialize the ACPI Interpreter\n");
+		printk(KERN_ERR PREFIX
+		       "Unable to initialize the ACPI Interpreter\n");
 		goto error0;
 	}
 
 	status = acpi_load_tables();
 	if (ACPI_FAILURE(status)) {
-		printk(KERN_ERR PREFIX "Unable to load the System Description Tables\n");
+		printk(KERN_ERR PREFIX
+		       "Unable to load the System Description Tables\n");
 		goto error0;
 	}
 
@@ -637,7 +621,6 @@
 		printk(KERN_ERR PREFIX "Unable to get the FADT\n");
 		goto error0;
 	}
-
 #ifdef CONFIG_X86
 	if (!acpi_ioapic) {
 		extern acpi_interrupt_flags acpi_sci_flags;
@@ -647,7 +630,8 @@
 			acpi_sci_flags.trigger = 3;
 
 		/* Set PIC-mode SCI trigger type */
-		acpi_pic_sci_set_trigger(acpi_fadt.sci_int, acpi_sci_flags.trigger);
+		acpi_pic_sci_set_trigger(acpi_fadt.sci_int,
+					 acpi_sci_flags.trigger);
 	} else {
 		extern int acpi_sci_override_gsi;
 		/*
@@ -658,7 +642,10 @@
 	}
 #endif
 
-	status = acpi_enable_subsystem(~(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE));
+	status =
+	    acpi_enable_subsystem(~
+				  (ACPI_NO_HARDWARE_INIT |
+				   ACPI_NO_ACPI_ENABLE));
 	if (ACPI_FAILURE(status)) {
 		printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
 		goto error0;
@@ -666,30 +653,32 @@
 
 	return_VOID;
 
-error0:
+      error0:
 	disable_acpi();
 	return_VOID;
 }
 
-static int __init
-acpi_bus_init (void)
+static int __init acpi_bus_init(void)
 {
-	int			result = 0;
-	acpi_status		status = AE_OK;
-	extern acpi_status	acpi_os_initialize1(void);
+	int result = 0;
+	acpi_status status = AE_OK;
+	extern acpi_status acpi_os_initialize1(void);
 
 	ACPI_FUNCTION_TRACE("acpi_bus_init");
 
 	status = acpi_os_initialize1();
 
-	status = acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
+	status =
+	    acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
 	if (ACPI_FAILURE(status)) {
-		printk(KERN_ERR PREFIX "Unable to start the ACPI Interpreter\n");
+		printk(KERN_ERR PREFIX
+		       "Unable to start the ACPI Interpreter\n");
 		goto error1;
 	}
 
 	if (ACPI_FAILURE(status)) {
-		printk(KERN_ERR PREFIX "Unable to initialize ACPI OS objects\n");
+		printk(KERN_ERR PREFIX
+		       "Unable to initialize ACPI OS objects\n");
 		goto error1;
 	}
 #ifdef CONFIG_ACPI_EC
@@ -723,9 +712,12 @@
 	/*
 	 * Register the for all standard device notifications.
 	 */
-	status = acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, &acpi_bus_notify, NULL);
+	status =
+	    acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
+					&acpi_bus_notify, NULL);
 	if (ACPI_FAILURE(status)) {
-		printk(KERN_ERR PREFIX "Unable to register for device notifications\n");
+		printk(KERN_ERR PREFIX
+		       "Unable to register for device notifications\n");
 		goto error1;
 	}
 
@@ -737,21 +729,20 @@
 	return_VALUE(0);
 
 	/* Mimic structured exception handling */
-error1:
+      error1:
 	acpi_terminate();
 	return_VALUE(-ENODEV);
 }
 
-decl_subsys(acpi,NULL,NULL);
+decl_subsys(acpi, NULL, NULL);
 
-static int __init acpi_init (void)
+static int __init acpi_init(void)
 {
-	int			result = 0;
+	int result = 0;
 
 	ACPI_FUNCTION_TRACE("acpi_init");
 
-	printk(KERN_INFO PREFIX "Subsystem revision %08x\n",
-		ACPI_CA_VERSION);
+	printk(KERN_INFO PREFIX "Subsystem revision %08x\n", ACPI_CA_VERSION);
 
 	if (acpi_disabled) {
 		printk(KERN_INFO PREFIX "Interpreter disabled.\n");
@@ -767,7 +758,8 @@
 		if (!PM_IS_ACTIVE())
 			pm_active = 1;
 		else {
-			printk(KERN_INFO PREFIX "APM is already active, exiting\n");
+			printk(KERN_INFO PREFIX
+			       "APM is already active, exiting\n");
 			disable_acpi();
 			result = -ENODEV;
 		}
