I've made some fairly extensive I2C logs under Windows and I'm comparing them 
with the linux I2C settings. I noticed that the wm8775 settings are 
substantially different under Windows. This patch syncs them with the Windows 
settings.

I'm curious to see if this makes any difference.

        Hans

PS: the patch is against the latest svn version.
Index: wm8775.c
===================================================================
--- wm8775.c	(revision 2683)
+++ wm8775.c	(working copy)
@@ -166,14 +166,20 @@
 		if (*input < 0 || *input > 0xf) {
 			WM8775_INFO("Invalid input %d.\n", *input);
 			return -EINVAL;
-		}
-		if (*input) {
-			wm8775_powerdn_set(client, 0);
-			wm8775_and_or(client, R21, ~0x0f, *input);
-		} else {
-			wm8775_powerdn_set(client, 1);
-		}
-		break;
+                }
+#if 0
+                if (*input) {
+		        wm8775_powerdn_set(client, 0);
+                        wm8775_and_or(client, R21, ~0x0f, *input);
+                } else {
+		        wm8775_powerdn_set(client, 1);
+                }
+#endif
+                wm8775_write(client, R21, 0x0c0);
+                wm8775_write(client, R14, 0x1d4);
+                wm8775_write(client, R15, 0x1d4);
+                wm8775_write(client, R21, (*input == 8) ? 0x108 : 0x102);
+                break;
 
 	case WM8775_LOG_STATE:
 		log_state(client);
@@ -250,13 +256,27 @@
 	client->flags = I2C_CLIENT_ALLOW_USE;
 	snprintf(client->name, sizeof(client->name) - 1, "wm8775");
 
-	// initialize wm8775
-	wm8775_write(client, R23, 0x000);	// RESET
-	wm8775_write(client, R11, 0x021);	// ADCFMT = 1
-	wm8775_write(client, R12, 0x102);	// ADCMS=1, ADCOSR=0
-	wm8775_write(client, R18, 0x082);	// DCY=8
-	wm8775_write(client, R19, 0x001);	// NGAT=1
-	wm8775_write(client, R21, 0x102);	// LRBOTH=1, AMX=2
+        // initialize wm8775
+        wm8775_write(client, R23, 0x000); // RESET
+        wm8775_write(client, R7,  0x000);
+        wm8775_write(client, R11, 0x021);
+        wm8775_write(client, R12, 0x102);
+        wm8775_write(client, R13, 0x000);
+        wm8775_write(client, R14, 0x1d4);
+        wm8775_write(client, R15, 0x1d4);
+        wm8775_write(client, R16, 0x1bf);
+        wm8775_write(client, R17, 0x185);
+        wm8775_write(client, R18, 0x0a2);
+        wm8775_write(client, R19, 0x005);
+        wm8775_write(client, R20, 0x07a);
+        wm8775_write(client, R21, 0x102);
+        /*
+        wm8775_write(client, R11, 0x021); // ADCFMT = 1
+        wm8775_write(client, R12, 0x102); // ADCMS=1, ADCOSR=0
+        wm8775_write(client, R18, 0x082); // DCY=8
+        wm8775_write(client, R19, 0x001); // NGAT=1
+        wm8775_write(client, R21, 0x102); // LRBOTH=1, AMX=2
+        */
 	i2c_attach_client(client);
 
 	return 0;

Reply via email to