--- ivtv-0.3.2j/driver/cx25840-driver.c.orig	2005-03-20 00:27:50.000000000 -0500
+++ ivtv-0.3.2j/driver/cx25840-driver.c	2005-03-20 00:45:12.000000000 -0500
@@ -479,30 +479,26 @@
 #if defined(LINUX26) && defined(CONFIG_FW_LOADER) && defined(IVTV_FW_LOADER)
 static int load_aud_fw(struct i2c_client *client)
 {
-	char *fw_buffer;
-	int size;
+	char buffer[2];
 	const struct firmware *fw = NULL;
 
 	INFO("requesting firmware");
 	if (request_firmware(&fw, AUDIO_FW, &client->adapter->dev) == 0) {
 		INFO("firmware size is %d", fw->size);
 
-		size = fw->size + 2;
-		fw_buffer = kmalloc(size, GFP_KERNEL);
-		fw_buffer[0] = 0x08;
-		fw_buffer[1] = 0x02;
-		memcpy(&fw_buffer[2], fw->data, fw->size);
-
-		release_firmware(fw);
+		buffer[0] = 0x08;
+		buffer[1] = 0x02;
 
 		start_fw_load(client);
-		if (i2c_master_send(client, fw_buffer, size) == size)
+		execute_wi2c(client, I_cx25840, buffer, 2); 
+		if (execute_wi2c(client, I_cx25840, buffer, 2) == 2 &&
+		    execute_wi2c(client, I_cx25840, fw->data, fw->size) == fw->size)
 			INFO("firmware loaded");
 		else
 			WARN("firmware load failed");
 		end_fw_load(client);
 
-		kfree(fw_buffer);
+		release_firmware(fw);
 	} else
 		WARN("firmware read failed");
 
