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

Commit b38fc2d9 authored by Naveen Jain's avatar Naveen Jain Committed by Greg Kroah-Hartman
Browse files

Staging: ti-st: cleanup sysfs code



Remove the older way of communicating with user-space
daemon UIM.
The older way involved creating of a new kobj and pid
sysfs file under it, and sending signal using that pid.

Now we communicate via rfkill to user-space UIM.

Background: UIM is the user-space daemon which upon
notification from ldisc driver, opens the tty, sets
default baud and then installs (tiocsetd) the ldisc.

Signed-off-by: default avatarNaveen Jain <naveen_jain@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 4f62e69b
Loading
Loading
Loading
Loading
+6 −43
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ static struct platform_driver kim_platform_driver = {
		   },
};

#ifndef LEGACY_RFKILL_SUPPORT
static ssize_t show_pid(struct device *dev, struct device_attribute
			*attr, char *buf);
static ssize_t store_pid(struct device *dev, struct device_attribute
@@ -80,12 +79,11 @@ static struct attribute *uim_attrs[] = {
static struct attribute_group uim_attr_grp = {
	.attrs = uim_attrs,
};
#else

static int kim_toggle_radio(void*, bool);
static const struct rfkill_ops kim_rfkill_ops = {
	.set_block = kim_toggle_radio,
};
#endif	/* LEGACY_RFKILL_SUPPORT */

/* strings to be used for rfkill entries and by
 * ST Core to be used for sysfs debug entry
@@ -436,13 +434,11 @@ long st_kim_start(void)
	pr_info(" %s", __func__);

	do {
#ifdef LEGACY_RFKILL_SUPPORT
		/* TODO: this is only because rfkill sub-system
		 * doesn't send events to user-space if the state
		 * isn't changed
		 */
		rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 1);
#endif
		/* Configure BT nShutdown to HIGH state */
		gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW);
		mdelay(5);	/* FIXME: a proper toggle */
@@ -450,7 +446,7 @@ long st_kim_start(void)
		mdelay(100);
		/* re-initialize the completion */
		INIT_COMPLETION(kim_gdata->ldisc_installed);
#ifndef LEGACY_RFKILL_SUPPORT
#if 0 /* older way of signalling user-space UIM */
		/* send signal to UIM */
		err = kill_pid(find_get_pid(kim_gdata->uim_pid), SIGUSR2, 0);
		if (err != 0) {
@@ -458,10 +454,9 @@ long st_kim_start(void)
			err = ST_ERR_FAILURE;
			continue;
		}
#else
#endif
		/* unblock and send event to UIM via /dev/rfkill */
		rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 0);
#endif
		/* wait for ldisc to be installed */
		err = wait_for_completion_timeout(&kim_gdata->ldisc_installed,
				msecs_to_jiffies(LDISC_TIME));
@@ -491,17 +486,16 @@ long st_kim_stop(void)
	long err = ST_SUCCESS;

	INIT_COMPLETION(kim_gdata->ldisc_installed);
#ifndef LEGACY_RFKILL_SUPPORT
#if 0 /* older way of signalling user-space UIM */
	/* send signal to UIM */
	err = kill_pid(find_get_pid(kim_gdata->uim_pid), SIGUSR2, 1);
	if (err != 0) {
		pr_err("sending SIGUSR2 to uim failed %ld", err);
		return ST_ERR_FAILURE;
	}
#else
#endif
	/* set BT rfkill to be blocked */
	err = rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 1);
#endif

	/* wait for ldisc to be un-installed */
	err = wait_for_completion_timeout(&kim_gdata->ldisc_installed,
@@ -523,7 +517,6 @@ long st_kim_stop(void)
/**********************************************************************/
/* functions called from subsystems */

#ifndef LEGACY_RFKILL_SUPPORT
/* called when sysfs entry is written to */
static ssize_t store_pid(struct device *dev, struct device_attribute
			 *devattr, char *buf, size_t count)
@@ -551,8 +544,6 @@ static ssize_t show_list(struct device *dev, struct device_attribute
	return strlen(buf);
}

#else /* LEGACY_RFKILL_SUPPORT */

/* function called from rfkill subsystem, when someone from
 * user space would write 0/1 on the sysfs entry
 * /sys/class/rfkill/rfkill0,1,3/state
@@ -580,8 +571,6 @@ static int kim_toggle_radio(void *data, bool blocked)
	return ST_SUCCESS;
}

#endif	/* LEGACY_RFKILL_SUPPORT */

void st_kim_ref(struct st_data_s **core_data)
{
	*core_data = kim_gdata->core_data;
@@ -639,30 +628,12 @@ static int kim_probe(struct platform_device *pdev)
			return status;
		}
	}
#ifndef LEGACY_RFKILL_SUPPORT
	/* pdev to contain BT, FM and GPS enable/N-Shutdown GPIOs
	 * execute request_gpio, set output direction
	 */
	kim_gdata->kim_kobj = kobject_create_and_add("uim", NULL);
	/* create the sysfs entry for UIM to put in pid */
	if (sysfs_create_group(kim_gdata->kim_kobj, &uim_attr_grp)) {
		pr_err(" sysfs entry creation failed");
		kobject_put(kim_gdata->kim_kobj);
		/* free requested GPIOs and fail probe */
		for (proto = ST_BT; proto < ST_MAX; proto++) {
			if (gpios[proto] != -1)
				gpio_free(gpios[proto]);
		}
		return -1;	/* fail insmod */
	}
	pr_info(" sysfs entry created ");
#endif
	/* get reference of pdev for request_firmware
	 */
	kim_gdata->kim_pdev = pdev;
	init_completion(&kim_gdata->kim_rcvd);
	init_completion(&kim_gdata->ldisc_installed);
#ifdef LEGACY_RFKILL_SUPPORT

	for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) {
		/* TODO: should all types be rfkill_type_bt ? */
		kim_gdata->rf_protos[proto] = proto;
@@ -685,7 +656,6 @@ static int kim_probe(struct platform_device *pdev)
		}
		pr_info("rfkill entry created for %ld", gpios[proto]);
	}
#endif
	return ST_SUCCESS;
}

@@ -701,18 +671,11 @@ static int kim_remove(struct platform_device *pdev)
		 * nShutdown gpio from the system
		 */
		gpio_free(gpios[proto]);
#ifdef LEGACY_RFKILL_SUPPORT
		rfkill_unregister(kim_gdata->rfkill[proto]);
		rfkill_destroy(kim_gdata->rfkill[proto]);
		kim_gdata->rfkill[proto] = NULL;
#endif
	}
	pr_info("kim: GPIO Freed");
#ifndef LEGACY_RFKILL_SUPPORT
	/* delete the sysfs entries */
	sysfs_remove_group(kim_gdata->kim_kobj, &uim_attr_grp);
	kobject_put(kim_gdata->kim_kobj);
#endif
	kim_gdata->kim_pdev = NULL;
	st_core_exit(kim_gdata->core_data);
	return ST_SUCCESS;
+0 −4
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@
 * devices are created for the 3 gpios
 * that ST has requested
 */
#define LEGACY_RFKILL_SUPPORT
/*
 * header file for ST provided by KIM
 */
@@ -60,15 +59,12 @@ struct kim_data_s {
	char resp_buffer[30];
	const struct firmware *fw_entry;
	long gpios[ST_MAX];
	struct kobject *kim_kobj;
/* used by kim_int_recv to validate fw response */
	unsigned long rx_state;
	unsigned long rx_count;
	struct sk_buff *rx_skb;
#ifdef LEGACY_RFKILL_SUPPORT
	struct rfkill *rfkill[ST_MAX];
	enum proto_type rf_protos[ST_MAX];
#endif
	struct st_data_s *core_data;
};