diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 804a53534370389a321077af34b3cb6ed625e949..808cce9b68057506415c213b3a9b374d0f28cf13 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -338,7 +338,7 @@ void omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)
 
 	/* When the functional clock disappears, too quick writes seem to
 	 * cause an abort. */
-	__delay(15000);
+	__delay(150000);
 }
 
 #endif
diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
index 2c7cd54fa85a76ef387a07bd7490a2e7ace9196a..1a72872d695afa543b9c6f460ded0bbfd1ed1822 100644
--- a/drivers/spi/omap2_mcspi.c
+++ b/drivers/spi/omap2_mcspi.c
@@ -426,7 +426,10 @@ static void omap2_mcspi_work(unsigned long arg)
 			omap2_mcspi_txrx(spi, t);
 
 			if (t->cs_change) {
-				omap2_mcspi_force_cs(spi, 0);
+				/* In the last transfer entry the flag means
+				 * _leave_ CS on */
+				if (t->transfer_list.next != &m->transfers)
+					omap2_mcspi_force_cs(spi, 0);
 				cs_active = 0;
 			}
 		}