Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70442664 authored by Pavan Savoy's avatar Pavan Savoy Committed by Greg Kroah-Hartman
Browse files

drivers:misc: ti-st: fix error codes



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: default avatarPavan Savoy <pavan_savoy@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ec60d0ad
Loading
Loading
Loading
Loading
+14 −17
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ int st_int_write(struct st_data_s *st_gdata,
	struct tty_struct *tty;
	struct tty_struct *tty;
	if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
	if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
		pr_err("tty unavailable to perform write");
		pr_err("tty unavailable to perform write");
		return -1;
		return -EINVAL;
	}
	}
	tty = st_gdata->tty;
	tty = st_gdata->tty;
#ifdef VERBOSE
#ifdef VERBOSE
@@ -124,9 +124,15 @@ void st_reg_complete(struct st_data_s *st_gdata, char err)
	pr_info(" %s ", __func__);
	pr_info(" %s ", __func__);
	for (i = 0; i < ST_MAX_CHANNELS; i++) {
	for (i = 0; i < ST_MAX_CHANNELS; i++) {
		if (likely(st_gdata != NULL && st_gdata->list[i] != NULL &&
		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]->reg_complete_cb
				(st_gdata->list[i]->priv_data, err);
				(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
	if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
	    || new_proto->reg_complete_cb == NULL) {
	    || new_proto->reg_complete_cb == NULL) {
		pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
		pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
		if (st_gdata == NULL)
		return -EINVAL;
			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;
	}
	}


	if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
	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) &&
			if ((st_gdata->protos_registered != ST_EMPTY) &&
			    (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
			    (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
				pr_err(" KIM failure complete callback ");
				pr_err(" KIM failure complete callback ");
				st_reg_complete(st_gdata, -1);
				st_reg_complete(st_gdata, err);
			}
			}

			return -EINVAL;
			return -1;
		}
		}


		/* the chnl_id might require other gpios to be toggled
		/* 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
	if (unlikely(skb == NULL || st_gdata == NULL
		|| st_gdata->tty == NULL)) {
		|| st_gdata->tty == NULL)) {
		pr_err("data/tty unavailable to perform write");
		pr_err("data/tty unavailable to perform write");
		return -1;
		return -EINVAL;
	}
	}
#ifdef DEBUG			/* open-up skb to read the 1st byte */
#ifdef DEBUG			/* open-up skb to read the 1st byte */
	chnl_id = skb->data[0];
	chnl_id = skb->data[0];
	if (unlikely(st_gdata->list[chnl_id] == NULL)) {
	if (unlikely(st_gdata->list[chnl_id] == NULL)) {
		pr_err(" chnl_id %d not registered, and writing? ",
		pr_err(" chnl_id %d not registered, and writing? ",
			   chnl_id);
			   chnl_id);
		return -1;
		return -EINVAL;
	}
	}
#endif
#endif
	pr_debug("%d to be written", skb->len);
	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);
		err = tty_unregister_ldisc(N_TI_WL);
		if (err)
		if (err)
			pr_err("unable to un-register ldisc");
			pr_err("unable to un-register ldisc");
		return -1;
		return err;
	}
	}
	*core_data = st_gdata;
	*core_data = st_gdata;
	return 0;
	return 0;
+9 −9
Original line number Original line Diff line number Diff line
@@ -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);
	INIT_COMPLETION(kim_gdata->kim_rcvd);
	if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) {
	if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) {
		pr_err("kim: couldn't write 4 bytes");
		pr_err("kim: couldn't write 4 bytes");
		return -1;
		return -EIO;
	}
	}


	if (!wait_for_completion_timeout
	if (!wait_for_completion_timeout
	    (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
	    (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
		pr_err(" waiting for ver info- timed out ");
		pr_err(" waiting for ver info- timed out ");
		return -1;
		return -ETIMEDOUT;
	}
	}


	version =
	version =
@@ -257,7 +257,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
		     (kim_gdata->fw_entry->size == 0))) {
		     (kim_gdata->fw_entry->size == 0))) {
		pr_err(" request_firmware failed(errno %ld) for %s", err,
		pr_err(" request_firmware failed(errno %ld) for %s", err,
			   bts_scr_name);
			   bts_scr_name);
		return -1;
		return -EINVAL;
	}
	}
	ptr = (void *)kim_gdata->fw_entry->data;
	ptr = (void *)kim_gdata->fw_entry->data;
	len = kim_gdata->fw_entry->size;
	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);
					   ((struct bts_action *)ptr)->size);
			if (unlikely(err < 0)) {
			if (unlikely(err < 0)) {
				release_firmware(kim_gdata->fw_entry);
				release_firmware(kim_gdata->fw_entry);
				return -1;
				return err;
			}
			}
			if (!wait_for_completion_timeout
			if (!wait_for_completion_timeout
			    (&kim_gdata->kim_rcvd,
			    (&kim_gdata->kim_rcvd,
@@ -301,7 +301,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
				    (" response timeout during fw download ");
				    (" response timeout during fw download ");
				/* timed out */
				/* timed out */
				release_firmware(kim_gdata->fw_entry);
				release_firmware(kim_gdata->fw_entry);
				return -1;
				return -ETIMEDOUT;
			}
			}
			break;
			break;
		case ACTION_DELAY:	/* sleep */
		case ACTION_DELAY:	/* sleep */
@@ -436,7 +436,7 @@ long st_kim_start(void *kim_data)
			pr_info("ldisc_install = 0");
			pr_info("ldisc_install = 0");
			sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
			sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
					NULL, "install");
					NULL, "install");
			err = -1;
			err = -ETIMEDOUT;
			continue;
			continue;
		} else {
		} else {
			/* ldisc installed now */
			/* ldisc installed now */
@@ -482,7 +482,7 @@ long st_kim_stop(void *kim_data)
			msecs_to_jiffies(LDISC_TIME));
			msecs_to_jiffies(LDISC_TIME));
	if (!err) {		/* timeout */
	if (!err) {		/* timeout */
		pr_err(" timed out waiting for ldisc to be un-installed");
		pr_err(" timed out waiting for ldisc to be un-installed");
		return -1;
		return -ETIMEDOUT;
	}
	}


	/* By default configure BT nShutdown to LOW state */
	/* 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);
	status = st_core_init(&kim_gdata->core_data);
	if (status != 0) {
	if (status != 0) {
		pr_err(" ST core init failed");
		pr_err(" ST core init failed");
		return -1;
		return -EIO;
	}
	}
	/* refer to itself */
	/* refer to itself */
	kim_gdata->core_data->kim_data = kim_gdata;
	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)) {
	if (IS_ERR(kim_debugfs_dir)) {
		pr_err(" debugfs entries creation failed ");
		pr_err(" debugfs entries creation failed ");
		kim_debugfs_dir = NULL;
		kim_debugfs_dir = NULL;
		return -1;
		return -EIO;
	}
	}


	debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
	debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
+1 −1
Original line number Original line Diff line number Diff line
@@ -130,7 +130,7 @@ unsigned long st_ll_sleep_state(struct st_data_s *st_data,
		break;
		break;
	default:
	default:
		pr_err(" unknown input/state ");
		pr_err(" unknown input/state ");
		return -1;
		return -EINVAL;
	}
	}
	return 0;
	return 0;
}
}