radio-tavarua: Configuring the FM Audio path

This changes ensures that if 'Ananlog' path is enabled
then 'Digital' path is disabled and vice-versa.

Change-Id: I3492471ab69923d29c9912bb1a84784638b38ee1
CRs-Fixed: 304621
Signed-off-by: Anantha Krishnan <ananthk@codeaurora.org>
diff --git a/drivers/media/radio/radio-tavarua.c b/drivers/media/radio/radio-tavarua.c
index 36bad1b..49bc46c 100644
--- a/drivers/media/radio/radio-tavarua.c
+++ b/drivers/media/radio/radio-tavarua.c
@@ -2786,20 +2786,14 @@
 			FMDBG("turning on ..\n");
 			retval = tavarua_start(radio, ctrl->value);
 			if (retval >= 0) {
-				FMDBG("Setting audio path ...\n");
-				retval = tavarua_set_audio_path(
-					TAVARUA_AUDIO_OUT_DIGITAL_ON,
-					TAVARUA_AUDIO_OUT_ANALOG_OFF);
-				if (retval < 0) {
-					FMDERR("Error in tavarua_set_audio_path"
-						" %d\n", retval);
-				}
-			 /* Enabling 'SoftMute' and 'SignalBlending' features */
-			value = (radio->registers[IOCTRL] |
+				/* Enabling 'SoftMute' & 'SignalBlending' */
+				value = (radio->registers[IOCTRL] |
 				    IOC_SFT_MUTE | IOC_SIG_BLND);
-			retval = tavarua_write_register(radio, IOCTRL, value);
-			if (retval < 0)
-				FMDBG("SMute and SBlending not enabled\n");
+				retval = tavarua_write_register(radio,
+					IOCTRL, value);
+				if (retval < 0)
+					FMDBG("SMute and SBlending"
+						"not enabled\n");
 			}
 		}
 		/* check if off */
@@ -2822,6 +2816,28 @@
 			}
 		}
 		break;
+	case V4L2_CID_PRIVATE_TAVARUA_SET_AUDIO_PATH:
+		FMDBG("Setting audio path ...\n");
+		if (ctrl->value == FM_DIGITAL_PATH) {
+			FMDBG("Digital audio path enabled ...\n");
+			retval = tavarua_set_audio_path(
+				TAVARUA_AUDIO_OUT_DIGITAL_ON,
+				TAVARUA_AUDIO_OUT_ANALOG_OFF);
+			if (retval < 0) {
+				FMDERR("Error in tavarua_set_audio_path"
+					" %d\n", retval);
+			}
+		} else if (ctrl->value == FM_ANALOG_PATH) {
+			FMDBG("Analog audio path enabled ...\n");
+			retval = tavarua_set_audio_path(
+				TAVARUA_AUDIO_OUT_ANALOG_ON,
+				TAVARUA_AUDIO_OUT_DIGITAL_OFF);
+			if (retval < 0) {
+				FMDERR("Error in tavarua_set_audio_path"
+					" %d\n", retval);
+			}
+		}
+		break;
 	case V4L2_CID_PRIVATE_TAVARUA_REGION:
 		retval = tavarua_set_region(radio, ctrl->value);
 		break;
diff --git a/include/media/tavarua.h b/include/media/tavarua.h
index ad9eafb..aafa5d0 100644
--- a/include/media/tavarua.h
+++ b/include/media/tavarua.h
@@ -145,7 +145,9 @@
 	* Here We have IOCTl's that are specifici to IRIS
 	* (V4L2_CID_PRIVATE_BASE+0x1D--V4L2_CID_PRIVATE_BASE+0x27)
 	*/
-	V4L2_CID_PRIVATE_TAVARUA_SET_NOTCH_FILTER = V4L2_CID_PRIVATE_BASE + 0x28
+	V4L2_CID_PRIVATE_TAVARUA_SET_NOTCH_FILTER =
+		V4L2_CID_PRIVATE_BASE + 0x28,
+	V4L2_CID_PRIVATE_TAVARUA_SET_AUDIO_PATH
 };
 
 enum tavarua_buf_t {
@@ -305,6 +307,10 @@
 	RDS_AF_JUMP,
 };
 
+enum audio_path {
+	FM_DIGITAL_PATH,
+	FM_ANALOG_PATH
+};
 #define SRCH_MODE	0x07
 #define SRCH_DIR	0x08 /* 0-up 1-down */
 #define SCAN_DWELL	0x70