[staging-next 6/6] staging/easycap: reduce code nesting in easycap_sound.c

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

 



Reshuffle error handling to reduce indentation nesting
This reduce number of lines exceeding 80 characters
from 41 to 15

use:
if (error)
	(return, goto, continue)
CODE

instead of:

if (good)
	<CODE>
else
	<EXCEPTION HANDLING>

Cc: Mike Thomas <rmthomas@xxxxxxxxxxx>
Signed-off-by: Tomas Winkler <tomas.winkler@xxxxxxxxx>
---
 drivers/staging/easycap/easycap_sound.c |  418 +++++++++++++++----------------
 1 files changed, 205 insertions(+), 213 deletions(-)

diff --git a/drivers/staging/easycap/easycap_sound.c b/drivers/staging/easycap/easycap_sound.c
index 5829e26..0164132 100644
--- a/drivers/staging/easycap/easycap_sound.c
+++ b/drivers/staging/easycap/easycap_sound.c
@@ -142,122 +142,118 @@ easycap_alsa_complete(struct urb *purb)
 			    strerror(purb->iso_frame_desc[i].status),
 			    purb->iso_frame_desc[i].status);
 		}
-		if (!purb->iso_frame_desc[i].status) {
-			more = purb->iso_frame_desc[i].actual_length;
-			if (!more)
-				peasycap->audio_mt++;
-			else {
-				if (peasycap->audio_mt) {
-					JOM(12, "%4i empty audio urb frames\n",
-					    peasycap->audio_mt);
-					peasycap->audio_mt = 0;
-				}
+		if (purb->iso_frame_desc[i].status == 0) {
+			JOM(12, "discarding audio samples because "
+			    "%i=purb->iso_frame_desc[i].status\n",
+			    purb->iso_frame_desc[i].status);
+			continue;
+		}
+		more = purb->iso_frame_desc[i].actual_length;
+		if (more == 0) {
+			peasycap->audio_mt++;
+			continue;
+		}
+		if (0 > more) {
+			SAM("MISTAKE: more is negative\n");
+			return;
+		}
 
-				p1 = (u8 *)(purb->transfer_buffer +
-					purb->iso_frame_desc[i].offset);
-
-				/*
-				 *  COPY more BYTES FROM ISOC BUFFER
-				 *  TO THE DMA BUFFER, CONVERTING
-				 *  8-BIT MONO TO 16-BIT SIGNED
-				 *  LITTLE-ENDIAN SAMPLES IF NECESSARY
-				 */
-				while (more) {
-					if (0 > more) {
-						SAM("MISTAKE: more is negative\n");
-						return;
-					}
-					much = dma_bytes - peasycap->dma_fill;
-					if (0 > much) {
-						SAM("MISTAKE: much is negative\n");
-						return;
-					}
-					if (0 == much) {
-						peasycap->dma_fill = 0;
-						peasycap->dma_next = fragment_bytes;
-						JOM(8, "wrapped dma buffer\n");
-					}
-					if (!peasycap->microphone) {
-						if (much > more)
-							much = more;
-						memcpy(prt->dma_area +
-						       peasycap->dma_fill,
-						       p1, much);
-						p1 += much;
-						more -= much;
-					} else {
+		if (peasycap->audio_mt) {
+			JOM(12, "%4i empty audio urb frames\n",
+			    peasycap->audio_mt);
+			peasycap->audio_mt = 0;
+		}
+
+		p1 = (u8 *)(purb->transfer_buffer +
+				purb->iso_frame_desc[i].offset);
+
+		/*
+		 *  COPY more BYTES FROM ISOC BUFFER
+		 *  TO THE DMA BUFFER, CONVERTING
+		 *  8-BIT MONO TO 16-BIT SIGNED
+		 *  LITTLE-ENDIAN SAMPLES IF NECESSARY
+		 */
+		while (more) {
+			much = dma_bytes - peasycap->dma_fill;
+			if (0 > much) {
+				SAM("MISTAKE: much is negative\n");
+				return;
+			}
+			if (0 == much) {
+				peasycap->dma_fill = 0;
+				peasycap->dma_next = fragment_bytes;
+				JOM(8, "wrapped dma buffer\n");
+			}
+			if (!peasycap->microphone) {
+				if (much > more)
+					much = more;
+				memcpy(prt->dma_area + peasycap->dma_fill,
+					p1, much);
+				p1 += much;
+				more -= much;
+			} else {
 #ifdef UPSAMPLE
-						if (much % 16)
-							JOM(8, "MISTAKE? much"
-							    " is not divisible by 16\n");
-						if (much > (16 * more))
-							much = 16 *
-							       more;
-						p2 = (u8 *)(prt->dma_area + peasycap->dma_fill);
-
-						for (j = 0;  j < (much/16);  j++) {
-							newaudio =  ((int) *p1) - 128;
-							newaudio = 128 * newaudio;
-
-							delta = (newaudio - oldaudio) / 4;
-							tmp = oldaudio + delta;
-
-							for (k = 0;  k < 4;  k++) {
-								*p2 = (0x00FF & tmp);
-								*(p2 + 1) = (0xFF00 & tmp) >> 8;
-								p2 += 2;
-								*p2 = (0x00FF & tmp);
-								*(p2 + 1) = (0xFF00 & tmp) >> 8;
-								p2 += 2;
-								tmp += delta;
-							}
-							p1++;
-							more--;
-							oldaudio = tmp;
-						}
+				if (much % 16)
+					JOM(8, "MISTAKE? much"
+					    " is not divisible by 16\n");
+				if (much > (16 * more))
+					much = 16 * more;
+				p2 = (u8 *)(prt->dma_area + peasycap->dma_fill);
+
+				for (j = 0;  j < (much / 16);  j++) {
+					newaudio =  ((int) *p1) - 128;
+					newaudio = 128 * newaudio;
+
+					delta = (newaudio - oldaudio) / 4;
+					tmp = oldaudio + delta;
+
+					for (k = 0;  k < 4;  k++) {
+						*p2 = (0x00FF & tmp);
+						*(p2 + 1) = (0xFF00 & tmp) >> 8;
+						p2 += 2;
+						*p2 = (0x00FF & tmp);
+						*(p2 + 1) = (0xFF00 & tmp) >> 8;
+						p2 += 2;
+						tmp += delta;
+					}
+					p1++;
+					more--;
+					oldaudio = tmp;
+				}
 #else /*!UPSAMPLE*/
-						if (much > (2 * more))
-							much = 2 * more;
-						p2 = (u8 *)(prt->dma_area + peasycap->dma_fill);
-
-						for (j = 0;  j < (much / 2);  j++) {
-							tmp = ((int) *p1) - 128;
-							tmp = 128 * tmp;
-							*p2 = (0x00FF & tmp);
-							*(p2 + 1) = (0xFF00 & tmp) >> 8;
-							p1++;
-							p2 += 2;
-							more--;
-						}
+				if (much > (2 * more))
+					much = 2 * more;
+				p2 = (u8 *)(prt->dma_area + peasycap->dma_fill);
+
+				for (j = 0;  j < (much / 2);  j++) {
+					tmp = ((int) *p1) - 128;
+					tmp = 128 * tmp;
+					*p2 = (0x00FF & tmp);
+					*(p2 + 1) = (0xFF00 & tmp) >> 8;
+					p1++;
+					p2 += 2;
+					more--;
+				}
 #endif /*UPSAMPLE*/
-					}
-					peasycap->dma_fill += much;
-					if (peasycap->dma_fill >= peasycap->dma_next) {
-						isfragment = peasycap->dma_fill / fragment_bytes;
-						if (0 > isfragment) {
-							SAM("MISTAKE: isfragment is "
-							    "negative\n");
-							return;
-						}
-						peasycap->dma_read = (isfragment - 1) * fragment_bytes;
-						peasycap->dma_next = (isfragment + 1) * fragment_bytes;
-						if (dma_bytes < peasycap->dma_next)
-							peasycap->dma_next = fragment_bytes;
-
-						if (0 <= peasycap->dma_read) {
-							JOM(8, "snd_pcm_period_elap"
-							    "sed(), %i="
-							    "isfragment\n",
-							    isfragment);
-							snd_pcm_period_elapsed(pss);
-						}
-					}
+			}
+			peasycap->dma_fill += much;
+			if (peasycap->dma_fill >= peasycap->dma_next) {
+				isfragment = peasycap->dma_fill / fragment_bytes;
+				if (0 > isfragment) {
+					SAM("MISTAKE: isfragment is negative\n");
+					return;
+				}
+				peasycap->dma_read = (isfragment - 1) * fragment_bytes;
+				peasycap->dma_next = (isfragment + 1) * fragment_bytes;
+				if (dma_bytes < peasycap->dma_next)
+					peasycap->dma_next = fragment_bytes;
+
+				if (0 <= peasycap->dma_read) {
+					JOM(8, "snd_pcm_period_elapsed(), %i="
+					    "isfragment\n", isfragment);
+					snd_pcm_period_elapsed(pss);
 				}
 			}
-		} else {
-			JOM(12, "discarding audio samples because "
-			    "%i=purb->iso_frame_desc[i].status\n",
-			    purb->iso_frame_desc[i].status);
 		}
 
 #ifdef UPSAMPLE
@@ -271,18 +267,18 @@ easycap_alsa_complete(struct urb *purb)
  */
 /*---------------------------------------------------------------------------*/
 resubmit:
-	if (peasycap->audio_isoc_streaming) {
-		rc = usb_submit_urb(purb, GFP_ATOMIC);
-		if (rc) {
-			if ((-ENODEV != rc) && (-ENOENT != rc)) {
-				SAM("ERROR: while %i=audio_idle, "
-				    "usb_submit_urb() failed "
-				    "with rc: -%s :%d\n", peasycap->audio_idle,
-				    strerror(rc), rc);
-			}
-			if (0 < peasycap->audio_isoc_streaming)
-				(peasycap->audio_isoc_streaming)--;
+	if (peasycap->audio_isoc_streaming == 0)
+		return;
+
+	rc = usb_submit_urb(purb, GFP_ATOMIC);
+	if (rc) {
+		if ((-ENODEV != rc) && (-ENOENT != rc)) {
+			SAM("ERROR: while %i=audio_idle, usb_submit_urb failed "
+			    "with rc: -%s :%d\n",
+				peasycap->audio_idle, strerror(rc), rc);
 		}
+		if (0 < peasycap->audio_isoc_streaming)
+			peasycap->audio_isoc_streaming--;
 	}
 	return;
 }
@@ -643,10 +639,9 @@ int easycap_alsa_probe(struct easycap *peasycap)
 		SAM("ERROR: Cannot do ALSA snd_card_register()\n");
 		snd_card_free(psnd_card);
 		return -EFAULT;
-	} else {
-		;
-		SAM("registered %s\n", &psnd_card->id[0]);
 	}
+
+	SAM("registered %s\n", &psnd_card->id[0]);
 	return 0;
 }
 #endif /*! CONFIG_EASYCAP_OSS */
@@ -737,83 +732,79 @@ submit_audio_urbs(struct easycap *peasycap)
 		SAM("ERROR: peasycap->pusb_device is NULL\n");
 		return -EFAULT;
 	}
-	if (!peasycap->audio_isoc_streaming) {
-		JOM(4, "initial submission of all audio urbs\n");
-		rc = usb_set_interface(peasycap->pusb_device,
-				       peasycap->audio_interface,
-				       peasycap->audio_altsetting_on);
-		JOM(8, "usb_set_interface(.,%i,%i) returned %i\n",
-		    peasycap->audio_interface,
-		    peasycap->audio_altsetting_on, rc);
-
-		isbad = 0;
-		nospc = 0;
-		m = 0;
-		list_for_each(plist_head, (peasycap->purb_audio_head)) {
-			pdata_urb = list_entry(plist_head, struct data_urb, list_head);
-			if (pdata_urb) {
-				purb = pdata_urb->purb;
-				if (purb) {
-					isbuf = pdata_urb->isbuf;
-
-					purb->interval = 1;
-					purb->dev = peasycap->pusb_device;
-					purb->pipe = usb_rcvisocpipe(peasycap->pusb_device,
-							peasycap->audio_endpointnumber);
-					purb->transfer_flags = URB_ISO_ASAP;
-					purb->transfer_buffer = peasycap->audio_isoc_buffer[isbuf].pgo;
-					purb->transfer_buffer_length = peasycap->audio_isoc_buffer_size;
+
+	if (peasycap->audio_isoc_streaming) {
+		JOM(4, "already streaming audio urbs\n");
+		return 0;
+	}
+
+	JOM(4, "initial submission of all audio urbs\n");
+	rc = usb_set_interface(peasycap->pusb_device,
+			       peasycap->audio_interface,
+			       peasycap->audio_altsetting_on);
+	JOM(8, "usb_set_interface(.,%i,%i) returned %i\n",
+	    peasycap->audio_interface,
+	    peasycap->audio_altsetting_on, rc);
+
+	isbad = 0;
+	nospc = 0;
+	m = 0;
+	list_for_each(plist_head, peasycap->purb_audio_head) {
+		pdata_urb = list_entry(plist_head, struct data_urb, list_head);
+		if (pdata_urb && pdata_urb->purb) {
+			purb = pdata_urb->purb;
+			isbuf = pdata_urb->isbuf;
+
+			purb->interval = 1;
+			purb->dev = peasycap->pusb_device;
+			purb->pipe = usb_rcvisocpipe(peasycap->pusb_device,
+					peasycap->audio_endpointnumber);
+			purb->transfer_flags = URB_ISO_ASAP;
+			purb->transfer_buffer = peasycap->audio_isoc_buffer[isbuf].pgo;
+			purb->transfer_buffer_length = peasycap->audio_isoc_buffer_size;
 #ifdef CONFIG_EASYCAP_OSS
-					purb->complete = easyoss_complete;
+			purb->complete = easyoss_complete;
 #else /* CONFIG_EASYCAP_OSS */
-					purb->complete = easycap_alsa_complete;
+			purb->complete = easycap_alsa_complete;
 #endif /* CONFIG_EASYCAP_OSS */
-					purb->context = peasycap;
-					purb->start_frame = 0;
-					purb->number_of_packets = peasycap->audio_isoc_framesperdesc;
-					for (j = 0;  j < peasycap->audio_isoc_framesperdesc; j++) {
-						purb->iso_frame_desc[j].offset = j * peasycap->audio_isoc_maxframesize;
-						purb->iso_frame_desc[j].length = peasycap->audio_isoc_maxframesize;
-					}
+			purb->context = peasycap;
+			purb->start_frame = 0;
+			purb->number_of_packets = peasycap->audio_isoc_framesperdesc;
+			for (j = 0;  j < peasycap->audio_isoc_framesperdesc; j++) {
+				purb->iso_frame_desc[j].offset = j * peasycap->audio_isoc_maxframesize;
+				purb->iso_frame_desc[j].length = peasycap->audio_isoc_maxframesize;
+			}
 
-					rc = usb_submit_urb(purb, GFP_KERNEL);
-					if (rc) {
-						isbad++;
-						SAM("ERROR: usb_submit_urb() failed"
-						    " for urb with rc: -%s: %d\n",
-						    strerror(rc), rc);
-					} else {
-						m++;
-					}
-				} else {
-					isbad++;
-				}
-			} else {
+			rc = usb_submit_urb(purb, GFP_KERNEL);
+			if (rc) {
 				isbad++;
+				SAM("ERROR: usb_submit_urb() failed"
+				    " for urb with rc: -%s: %d\n",
+				    strerror(rc), rc);
+			} else {
+				m++;
 			}
-		}
-		if (nospc) {
-			SAM("-ENOSPC=usb_submit_urb() for %i urbs\n", nospc);
-			SAM(".....  possibly inadequate USB bandwidth\n");
-			peasycap->audio_eof = 1;
-		}
-		if (isbad) {
-			JOM(4, "attempting cleanup instead of submitting\n");
-			list_for_each(plist_head, (peasycap->purb_audio_head)) {
-				pdata_urb = list_entry(plist_head, struct data_urb, list_head);
-				if (pdata_urb) {
-					purb = pdata_urb->purb;
-					if (purb)
-						usb_kill_urb(purb);
-				}
-			}
-			peasycap->audio_isoc_streaming = 0;
 		} else {
-			peasycap->audio_isoc_streaming = m;
-			JOM(4, "submitted %i audio urbs\n", m);
+			isbad++;
 		}
-	} else
-		JOM(4, "already streaming audio urbs\n");
+	}
+	if (nospc) {
+		SAM("-ENOSPC=usb_submit_urb() for %i urbs\n", nospc);
+		SAM(".....  possibly inadequate USB bandwidth\n");
+		peasycap->audio_eof = 1;
+	}
+	if (isbad) {
+		JOM(4, "attempting cleanup instead of submitting\n");
+		list_for_each(plist_head, (peasycap->purb_audio_head)) {
+			pdata_urb = list_entry(plist_head, struct data_urb, list_head);
+			if (pdata_urb && pdata_urb->purb)
+				usb_kill_urb(pdata_urb->purb);
+		}
+		peasycap->audio_isoc_streaming = 0;
+	} else {
+		peasycap->audio_isoc_streaming = m;
+		JOM(4, "submitted %i audio urbs\n", m);
+	}
 
 	return 0;
 }
@@ -834,29 +825,30 @@ kill_audio_urbs(struct easycap *peasycap)
 		SAY("ERROR: peasycap is NULL\n");
 		return -EFAULT;
 	}
-	if (peasycap->audio_isoc_streaming) {
-		if (peasycap->purb_audio_head) {
-			peasycap->audio_isoc_streaming = 0;
-			JOM(4, "killing audio urbs\n");
-			m = 0;
-			list_for_each(plist_head, (peasycap->purb_audio_head)) {
-				pdata_urb = list_entry(plist_head, struct data_urb, list_head);
-				if (pdata_urb) {
-					if (pdata_urb->purb) {
-						usb_kill_urb(pdata_urb->purb);
-						m++;
-					}
-				}
-			}
-			JOM(4, "%i audio urbs killed\n", m);
-		} else {
-			SAM("ERROR: peasycap->purb_audio_head is NULL\n");
-			return -EFAULT;
-		}
-	} else {
+
+	if (!peasycap->audio_isoc_streaming) {
 		JOM(8, "%i=audio_isoc_streaming, no audio urbs killed\n",
 		    peasycap->audio_isoc_streaming);
+		return 0;
+	}
+
+	if (!peasycap->purb_audio_head) {
+		SAM("ERROR: peasycap->purb_audio_head is NULL\n");
+		return -EFAULT;
 	}
+
+	peasycap->audio_isoc_streaming = 0;
+	JOM(4, "killing audio urbs\n");
+	m = 0;
+	list_for_each(plist_head, (peasycap->purb_audio_head)) {
+		pdata_urb = list_entry(plist_head, struct data_urb, list_head);
+		if (pdata_urb && pdata_urb->purb) {
+			usb_kill_urb(pdata_urb->purb);
+			m++;
+		}
+	}
+	JOM(4, "%i audio urbs killed\n", m);
+
 	return 0;
 }
 /*****************************************************************************/
-- 
1.7.4

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux