--- a/drivers/alsa/alsa_driver.c	2009-05-06 06:36:08.000000000 +1000
+++ b/drivers/alsa/alsa_driver.c	2010-07-28 21:02:57.238101024 +1000
@@ -2388,7 +2388,7 @@
 	strcpy (params[i].name, "period");
 	params[i].character  = 'p';
 	params[i].type       = JackDriverParamUInt;
-	params[i].value.ui   = 1024U;
+	params[i].value.ui   = 256U;            /* TWL4030 capture. */
 	strcpy (params[i].short_desc, "Frames per period");
 	strcpy (params[i].long_desc, params[i].short_desc);
 
@@ -2396,7 +2396,7 @@
 	strcpy (params[i].name, "nperiods");
 	params[i].character  = 'n';
 	params[i].type       = JackDriverParamUInt;
-	params[i].value.ui   = 2U;
+	params[i].value.ui   = 4U;              /* TWL4030 capture. */
 	strcpy (params[i].short_desc, "Number of periods of playback latency");
 	strcpy (params[i].long_desc, params[i].short_desc);
 
@@ -2518,8 +2518,8 @@
 driver_initialize (jack_client_t *client, const JSList * params)
 {
         jack_nframes_t srate = 48000;
-	jack_nframes_t frames_per_interrupt = 1024;
-	unsigned long user_nperiods = 2;
+	jack_nframes_t frames_per_interrupt = 256;      /* TWL4030 needs small number of frames here. */
+	unsigned long user_nperiods = 4;                /* TWL4030 needs 4 periods to avoid XRuns. */
 	char *playback_pcm_name = "hw:0";
 	char *capture_pcm_name = "hw:0";
 	int hw_monitoring = FALSE;
