[PATCH/RFC 4/4] msm: audio: qdsp6v2: simplify broadcast_event()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Eero Nurkkala <eero.nurkkala@xxxxxxxxxx>

Instead of having a large broadcast_event() - function, split
it with a sub function msm_fill_evt_payload() that fills the
structures. This makes the broadcast_event() more readable.

Signed-off-by: Eero Nurkkala <eero.nurkkala@xxxxxxxxxx>
---
branch: android-msm-2.6.35
 .../mach-msm/include/mach/qdsp6v2/audio_dev_ctl.h  |    2 +
 arch/arm/mach-msm/qdsp6v2/audio_dev_ctl.c          |  149 +++++++++++---------
 2 files changed, 82 insertions(+), 69 deletions(-)

diff --git a/arch/arm/mach-msm/include/mach/qdsp6v2/audio_dev_ctl.h b/arch/arm/mach-msm/include/mach/qdsp6v2/audio_dev_ctl.h
index 39039a1..4ef22d6 100644
--- a/arch/arm/mach-msm/include/mach/qdsp6v2/audio_dev_ctl.h
+++ b/arch/arm/mach-msm/include/mach/qdsp6v2/audio_dev_ctl.h
@@ -179,6 +179,8 @@ struct message_header {
 #define AUDDEV_EVT_VOICE_STATE_CHG 0x200 /* Change in voice state */
 
 #define AUDDEV_CLNT_VOC 0x1 /*Vocoder clients*/
+#define AUDDEV_CLNT_VOC_S1 0x11 /* subtypes for msm_fill_evt_payload() */
+#define AUDDEV_CLNT_VOC_S2 0x12
 #define AUDDEV_CLNT_DEC 0x2 /*Decoder clients*/
 #define AUDDEV_CLNT_ENC 0x3 /* Encoder clients */
 #define AUDDEV_CLNT_AUDIOCAL 0x4 /* AudioCalibration client */
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_dev_ctl.c b/arch/arm/mach-msm/qdsp6v2/audio_dev_ctl.c
index b414f3e..6b81197 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_dev_ctl.c
+++ b/arch/arm/mach-msm/qdsp6v2/audio_dev_ctl.c
@@ -995,6 +995,71 @@ struct miscdevice audio_dev_ctrl_misc = {
 	.fops	= &audio_dev_ctrl_fops,
 };
 
+static void msm_fill_evt_payload(struct msm_snddev_info *dev_info,
+				union auddev_evt_data *evt_payload,
+				uint32_t clnt_type)
+{
+	int i;
+
+	switch (clnt_type) {
+	case AUDDEV_CLNT_VOC:
+		evt_payload->voc_vm_info.acdb_dev_id =
+					dev_info->acdb_id;
+		if (dev_info->capability & SNDDEV_CAP_TX) {
+			evt_payload->voc_vm_info.dev_type = SNDDEV_CAP_TX;
+			evt_payload->voc_vm_info.dev_vm_val.mute =
+					routing_info.tx_mute;
+		} else {
+			evt_payload->voc_vm_info.dev_type = SNDDEV_CAP_RX;
+			evt_payload->voc_vm_info.dev_vm_val.vol =
+					routing_info.voice_rx_vol;
+		}
+		break;
+
+	case AUDDEV_CLNT_VOC_S2:
+		evt_payload->voc_devinfo.dev_type = (dev_info->capability &
+				SNDDEV_CAP_TX) ? SNDDEV_CAP_TX : SNDDEV_CAP_RX;
+		evt_payload->voc_devinfo.acdb_dev_id = dev_info->acdb_id;
+		evt_payload->voc_devinfo.dev_port_id = dev_info->copp_id;
+		evt_payload->voc_devinfo.dev_sample =
+					dev_info->set_sample_rate ?
+					dev_info->set_sample_rate :
+					dev_info->sample_rate;
+		if (dev_info->capability & SNDDEV_CAP_RX) {
+			for (i = 0; i < VOC_RX_VOL_ARRAY_NUM; i++) {
+				evt_payload->voc_devinfo.max_rx_vol[i] =
+						dev_info->max_voc_rx_vol[i];
+				evt_payload->voc_devinfo.min_rx_vol[i] =
+						dev_info->min_voc_rx_vol[i];
+			}
+		}
+		break;
+
+	case AUDDEV_CLNT_VOC_S1:
+	case AUDDEV_CLNT_DEC:
+	case AUDDEV_CLNT_ENC:
+		evt_payload->freq_info.sample_rate = dev_info->set_sample_rate;
+		evt_payload->freq_info.dev_type	= dev_info->capability;
+		evt_payload->freq_info.acdb_dev_id = dev_info->acdb_id;
+		break;
+
+	case AUDDEV_CLNT_AUDIOCAL:
+		evt_payload->audcal_info.dev_id = dev_info->copp_id;
+		evt_payload->audcal_info.acdb_id = dev_info->acdb_id;
+		evt_payload->audcal_info.dev_type = (dev_info->capability &
+				SNDDEV_CAP_TX) ? SNDDEV_CAP_TX : SNDDEV_CAP_RX;
+		evt_payload->audcal_info.sample_rate =
+					dev_info->set_sample_rate ?
+					dev_info->set_sample_rate :
+					dev_info->sample_rate;
+		break;
+
+	default:
+		pr_err("%s: Unknown case.\n", __func__);
+		break;
+	}
+}
+
 /* session id is 64 bit routing mask per device
  * 0-15 for voice clients
  * 16-31 for Decoder clients
@@ -1003,7 +1068,7 @@ struct miscdevice audio_dev_ctrl_misc = {
  */
 void broadcast_event(u32 evt_id, u32 dev_id, u64 session_id)
 {
-	int clnt_id = 0, i;
+	int clnt_id = 0;
 	union auddev_evt_data *evt_payload;
 	struct msm_snd_evt_listner *callback;
 	struct msm_snddev_info *dev_info = NULL;
@@ -1088,12 +1153,8 @@ volume_strm:
 					== dev_info->set_sample_rate)
 					goto sent_dec;
 				else {
-					evt_payload->freq_info.sample_rate
-						= dev_info->set_sample_rate;
-					evt_payload->freq_info.dev_type
-						= dev_info->capability;
-					evt_payload->freq_info.acdb_dev_id
-						= dev_info->acdb_id;
+					msm_fill_evt_payload(dev_info,
+						evt_payload, AUDDEV_CLNT_DEC);
 				}
 			} else if (evt_id == AUDDEV_EVT_VOICE_STATE_CHG)
 				evt_payload->voice_state =
@@ -1119,12 +1180,8 @@ sent_dec:
 							= 0;
 					goto sent_enc;
 				 } else {
-					evt_payload->freq_info.sample_rate
-						= dev_info->set_sample_rate;
-					evt_payload->freq_info.dev_type
-						= dev_info->capability;
-					evt_payload->freq_info.acdb_dev_id
-						= dev_info->acdb_id;
+					msm_fill_evt_payload(dev_info,
+						evt_payload, AUDDEV_CLNT_ENC);
 				}
 			} else if (evt_id == AUDDEV_EVT_VOICE_STATE_CHG)
 				evt_payload->voice_state =
@@ -1147,17 +1204,9 @@ aud_cal:
 			else if (!dev_info->sessions)
 				goto sent_aud_cal;
 			else {
-				evt_payload->audcal_info.dev_id =
-						dev_info->copp_id;
-				evt_payload->audcal_info.acdb_id =
-						dev_info->acdb_id;
-				evt_payload->audcal_info.dev_type =
-					(dev_info->capability & SNDDEV_CAP_TX) ?
-					SNDDEV_CAP_TX : SNDDEV_CAP_RX;
-				evt_payload->audcal_info.sample_rate =
-					dev_info->set_sample_rate ?
-					dev_info->set_sample_rate :
-					dev_info->sample_rate;
+				msm_fill_evt_payload(dev_info,
+						evt_payload,
+						AUDDEV_CLNT_AUDIOCAL);
 			}
 			callback->auddev_evt_listener(
 				evt_id,
@@ -1181,23 +1230,8 @@ voc_events:
 				pending_sent = 1;
 
 			if (evt_id == AUDDEV_EVT_DEVICE_VOL_MUTE_CHG) {
-				if (dev_info->capability & SNDDEV_CAP_TX) {
-					evt_payload->voc_vm_info.dev_type =
-						SNDDEV_CAP_TX;
-					evt_payload->voc_vm_info.acdb_dev_id =
-						dev_info->acdb_id;
-					evt_payload->
-					voc_vm_info.dev_vm_val.mute =
-						routing_info.tx_mute;
-				} else {
-					evt_payload->voc_vm_info.dev_type =
-						SNDDEV_CAP_RX;
-					evt_payload->voc_vm_info.acdb_dev_id =
-						dev_info->acdb_id;
-					evt_payload->
-					voc_vm_info.dev_vm_val.vol =
-						routing_info.voice_rx_vol;
-				}
+					msm_fill_evt_payload(dev_info,
+						evt_payload, AUDDEV_CLNT_VOC);
 			} else if ((evt_id == AUDDEV_EVT_START_VOICE)
 					|| (evt_id == AUDDEV_EVT_END_VOICE))
 				memset(evt_payload, 0,
@@ -1207,41 +1241,18 @@ voc_events:
 						!= dev_info->set_sample_rate) {
 					routing_info.voice_tx_sample_rate
 						= dev_info->set_sample_rate;
-					evt_payload->freq_info.sample_rate
-						= dev_info->set_sample_rate;
-					evt_payload->freq_info.dev_type
-						= dev_info->capability;
-					evt_payload->freq_info.acdb_dev_id
-						= dev_info->acdb_id;
+					msm_fill_evt_payload(dev_info,
+						evt_payload,
+						AUDDEV_CLNT_VOC_S1);
 				} else
 					goto sent_voc;
 			} else if (evt_id == AUDDEV_EVT_VOICE_STATE_CHG)
 				evt_payload->voice_state =
 						routing_info.voice_state;
 			else {
-				evt_payload->voc_devinfo.dev_type =
-					(dev_info->capability & SNDDEV_CAP_TX) ?
-					SNDDEV_CAP_TX : SNDDEV_CAP_RX;
-				evt_payload->voc_devinfo.acdb_dev_id =
-					dev_info->acdb_id;
-				evt_payload->voc_devinfo.dev_port_id =
-					dev_info->copp_id;
-				evt_payload->voc_devinfo.dev_sample =
-					dev_info->set_sample_rate ?
-					dev_info->set_sample_rate :
-					dev_info->sample_rate;
+				msm_fill_evt_payload(dev_info, evt_payload,
+						AUDDEV_CLNT_VOC_S2);
 				evt_payload->voc_devinfo.dev_id = dev_id;
-				if (dev_info->capability & SNDDEV_CAP_RX) {
-					for (i = 0; i < VOC_RX_VOL_ARRAY_NUM;
-						i++) {
-						evt_payload->
-						voc_devinfo.max_rx_vol[i] =
-						dev_info->max_voc_rx_vol[i];
-						evt_payload
-						->voc_devinfo.min_rx_vol[i] =
-						dev_info->min_voc_rx_vol[i];
-					}
-				}
 			}
 			callback->auddev_evt_listener(
 				evt_id,
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux