mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Pavan Savoy <pavan_savoy@ti.com>, Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 23/50] drivers:misc: ti-st: fix error codes
Date: Wed, 16 Mar 2011 14:11:01 -0700	[thread overview]
Message-ID: <1300309888-5028-23-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <1300309888-5028-1-git-send-email-gregkh@suse.de>

From: Pavan Savoy <pavan_savoy@ti.com>

set-right the error codes that the shared transport driver
returns.
Instead of magic numbers like -1, return relevant codes such as
ETIMEDOUT or EIO, EAGAIN when wait times out or uart write bytes don't
match expected value or when registration fails and needs to be
attempted again.

Signed-off-by: Pavan Savoy <pavan_savoy@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 drivers/misc/ti-st/st_core.c |   31 ++++++++++++++-----------------
 drivers/misc/ti-st/st_kim.c  |   18 +++++++++---------
 drivers/misc/ti-st/st_ll.c   |    2 +-
 3 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c
index 84d73c5..79d2dc3 100644
--- a/drivers/misc/ti-st/st_core.c
+++ b/drivers/misc/ti-st/st_core.c
@@ -65,7 +65,7 @@ int st_int_write(struct st_data_s *st_gdata,
 	struct tty_struct *tty;
 	if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
 		pr_err("tty unavailable to perform write");
-		return -1;
+		return -EINVAL;
 	}
 	tty = st_gdata->tty;
 #ifdef VERBOSE
@@ -124,9 +124,15 @@ void st_reg_complete(struct st_data_s *st_gdata, char err)
 	pr_info(" %s ", __func__);
 	for (i = 0; i < ST_MAX_CHANNELS; i++) {
 		if (likely(st_gdata != NULL && st_gdata->list[i] != NULL &&
-			   st_gdata->list[i]->reg_complete_cb != NULL))
+			   st_gdata->list[i]->reg_complete_cb != NULL)) {
 			st_gdata->list[i]->reg_complete_cb
 				(st_gdata->list[i]->priv_data, err);
+			pr_info("protocol %d's cb sent %d\n", i, err);
+			if (err) { /* cleanup registered protocol */
+				st_gdata->protos_registered--;
+				st_gdata->list[i] = NULL;
+			}
+		}
 	}
 }
 
@@ -457,15 +463,7 @@ long st_register(struct st_proto_s *new_proto)
 	if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
 	    || new_proto->reg_complete_cb == NULL) {
 		pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
-		if (st_gdata == NULL)
-			pr_err("error 1\n");
-		if (new_proto == NULL)
-			pr_err("error 2\n");
-		if (new_proto->recv == NULL)
-			pr_err("error 3\n");
-		if (new_proto->reg_complete_cb == NULL)
-			pr_err("erro 4\n");
-		return -1;
+		return -EINVAL;
 	}
 
 	if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
@@ -512,10 +510,9 @@ long st_register(struct st_proto_s *new_proto)
 			if ((st_gdata->protos_registered != ST_EMPTY) &&
 			    (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
 				pr_err(" KIM failure complete callback ");
-				st_reg_complete(st_gdata, -1);
+				st_reg_complete(st_gdata, err);
 			}
-
-			return -1;
+			return -EINVAL;
 		}
 
 		/* the chnl_id might require other gpios to be toggled
@@ -634,14 +631,14 @@ long st_write(struct sk_buff *skb)
 	if (unlikely(skb == NULL || st_gdata == NULL
 		|| st_gdata->tty == NULL)) {
 		pr_err("data/tty unavailable to perform write");
-		return -1;
+		return -EINVAL;
 	}
 #ifdef DEBUG			/* open-up skb to read the 1st byte */
 	chnl_id = skb->data[0];
 	if (unlikely(st_gdata->list[chnl_id] == NULL)) {
 		pr_err(" chnl_id %d not registered, and writing? ",
 			   chnl_id);
-		return -1;
+		return -EINVAL;
 	}
 #endif
 	pr_debug("%d to be written", skb->len);
@@ -829,7 +826,7 @@ int st_core_init(struct st_data_s **core_data)
 		err = tty_unregister_ldisc(N_TI_WL);
 		if (err)
 			pr_err("unable to un-register ldisc");
-		return -1;
+		return err;
 	}
 	*core_data = st_gdata;
 	return 0;
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index a7fda81..ccc46a7b 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -201,13 +201,13 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name)
 	INIT_COMPLETION(kim_gdata->kim_rcvd);
 	if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) {
 		pr_err("kim: couldn't write 4 bytes");
-		return -1;
+		return -EIO;
 	}
 
 	if (!wait_for_completion_timeout
 	    (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
 		pr_err(" waiting for ver info- timed out ");
-		return -1;
+		return -ETIMEDOUT;
 	}
 
 	version =
@@ -257,7 +257,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
 		     (kim_gdata->fw_entry->size == 0))) {
 		pr_err(" request_firmware failed(errno %ld) for %s", err,
 			   bts_scr_name);
-		return -1;
+		return -EINVAL;
 	}
 	ptr = (void *)kim_gdata->fw_entry->data;
 	len = kim_gdata->fw_entry->size;
@@ -292,7 +292,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
 					   ((struct bts_action *)ptr)->size);
 			if (unlikely(err < 0)) {
 				release_firmware(kim_gdata->fw_entry);
-				return -1;
+				return err;
 			}
 			if (!wait_for_completion_timeout
 			    (&kim_gdata->kim_rcvd,
@@ -301,7 +301,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
 				    (" response timeout during fw download ");
 				/* timed out */
 				release_firmware(kim_gdata->fw_entry);
-				return -1;
+				return -ETIMEDOUT;
 			}
 			break;
 		case ACTION_DELAY:	/* sleep */
@@ -436,7 +436,7 @@ long st_kim_start(void *kim_data)
 			pr_info("ldisc_install = 0");
 			sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
 					NULL, "install");
-			err = -1;
+			err = -ETIMEDOUT;
 			continue;
 		} else {
 			/* ldisc installed now */
@@ -482,7 +482,7 @@ long st_kim_stop(void *kim_data)
 			msecs_to_jiffies(LDISC_TIME));
 	if (!err) {		/* timeout */
 		pr_err(" timed out waiting for ldisc to be un-installed");
-		return -1;
+		return -ETIMEDOUT;
 	}
 
 	/* By default configure BT nShutdown to LOW state */
@@ -642,7 +642,7 @@ static int kim_probe(struct platform_device *pdev)
 	status = st_core_init(&kim_gdata->core_data);
 	if (status != 0) {
 		pr_err(" ST core init failed");
-		return -1;
+		return -EIO;
 	}
 	/* refer to itself */
 	kim_gdata->core_data->kim_data = kim_gdata;
@@ -704,7 +704,7 @@ static int kim_probe(struct platform_device *pdev)
 	if (IS_ERR(kim_debugfs_dir)) {
 		pr_err(" debugfs entries creation failed ");
 		kim_debugfs_dir = NULL;
-		return -1;
+		return -EIO;
 	}
 
 	debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
diff --git a/drivers/misc/ti-st/st_ll.c b/drivers/misc/ti-st/st_ll.c
index 2bda8de..f72de6b 100644
--- a/drivers/misc/ti-st/st_ll.c
+++ b/drivers/misc/ti-st/st_ll.c
@@ -130,7 +130,7 @@ unsigned long st_ll_sleep_state(struct st_data_s *st_data,
 		break;
 	default:
 		pr_err(" unknown input/state ");
-		return -1;
+		return -EINVAL;
 	}
 	return 0;
 }
-- 
1.7.4.1


  parent reply	other threads:[~2011-03-16 21:26 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-16 20:52 [GIT PATCH] driver core patches for .39 Greg KH
2011-03-16 21:10 ` [PATCH 01/50] driver-core: document restrictions on device_rename() Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 02/50] docs/sysfs: Update directory/kobject documentation Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 03/50] docs/sysfs: show() methods should use scnprintf() Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 04/50] kobject: Add missing format attribute specifications Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 05/50] Dynamic debug: Add more flags Greg Kroah-Hartman
2011-03-17 17:56     ` Jason Baron
2011-03-17 18:02       ` Greg KH
2011-03-18 10:22         ` Ingo Molnar
2011-03-18 11:19           ` Bart Van Assche
2011-03-16 21:10   ` [PATCH 06/50] firmware_classs: change val uevent's type to bool Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 07/50] sysdev: Fixup warning message Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 08/50] debugfs: remove module_exit() Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 09/50] sysdev: Do not register with sysdev when erroring on add Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 10/50] Translate Documentation/SecurityBugs into Chinese Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 11/50] pch_phub: add new device ML7213 Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 12/50] dynamic_debug: add #include <linux/sched.h> Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 13/50] memory hotplug: Allow memory blocks to span multiple memory sections Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 14/50] memory hotplug: Update phys_index to [start|end]_section_nr Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 15/50] memory hotplug: Define memory_block_size_bytes for powerpc/pseries Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 16/50] memory hotplug: Define memory_block_size_bytes for x86_64 with CONFIG_X86_UV Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 17/50] memory hotplug: sysfs probe routine should add all memory sections Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 18/50] driver core: Replace the dangerous to_root_device macro with an inline function Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 19/50] sysfs: Capitalize description of SYSFS_DEPRECATED{_V2} options Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 20/50] Fix a mistake Chinese character in Documentation/zh_CN/SubmittingPatches Greg Kroah-Hartman
2011-03-16 21:10   ` [PATCH 21/50] drivers:misc: ti-st: register with channel IDs Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 22/50] drivers:misc: ti-st: move from rfkill to sysfs Greg Kroah-Hartman
2011-03-16 21:11   ` Greg Kroah-Hartman [this message]
2011-03-16 21:11   ` [PATCH 24/50] drivers:misc: ti-st: set right debug levels for logs Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 25/50] drivers:misc: ti-st: firmware download optimization Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 26/50] drivers:misc: ti-st: fix hci-ll on wake_ind collision Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 27/50] drivers:misc: ti-st: remove multiple gpio handling Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 28/50] kobject.h: fix build when CONFIG_HOTPLUG is disabled Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 29/50] debugfs: Fix filesystem reference counting on debugfs_remove() failure Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 30/50] Translat Documentation/SubmittingChecklist into Chinese Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 31/50] Translate linux-2.6/Documentation/magic-number.txt " Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 32/50] Driver core: convert platform_{get,set}_drvdata to static inline functions Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 33/50] firmware: Add DMI entry types to the headers Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 34/50] firmware: Basic dmi-sysfs support Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 35/50] firmware: Break out system_event_log in dmi-sysfs Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 36/50] firmware: Expose DMI type 15 System Event Log Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 37/50] firmware: Add documentation for /sys/firmware/dmi Greg Kroah-Hartman
2011-03-18 20:53     ` Valdis.Kletnieks
2011-03-18 23:50       ` [PATCH] firmware: Fix grammar in sysfs-firmware-dmi doc Mike Waychison
2011-03-16 21:11   ` [PATCH 38/50] firmware: Fix unaligned memory accesses in dmi-sysfs Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 39/50] Fix spelling mistakes in Documentation/zh_CN/SubmittingPatches Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 40/50] UIO: add PRUSS UIO driver support Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 41/50] kref: Fix typo in kref documentation Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 42/50] drivers:misc: ti-st: fix debugging code Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 43/50] efivars: move efivars globals into struct efivars Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 44/50] efivars: Make efivars bin_attributes dynamic Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 45/50] efivars: parameterize efivars Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 46/50] efivars: Split out variable registration Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 47/50] efivars: Parameterize operations Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 48/50] efivars: Expose efivars functionality to external drivers Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 49/50] efivars: Add Documentation Greg Kroah-Hartman
2011-03-16 21:11   ` [PATCH 50/50] printk: do not mangle valid userspace syslog prefixes Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1300309888-5028-23-git-send-email-gregkh@suse.de \
    --to=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavan_savoy@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®