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

Commit 06706b58 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
parents cbff1e91 d3654cd2
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -80,5 +80,4 @@ struct st_proto_s {
extern long st_register(struct st_proto_s *);
extern long st_unregister(enum proto_type);

extern struct platform_device *st_get_plat_device(void);
#endif /* ST_H */
+4 −5
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@
#include "st_ll.h"
#include "st.h"

#define VERBOSE
/* strings to be used for rfkill entries and by
 * ST Core to be used for sysfs debug entry
 */
@@ -581,7 +580,7 @@ long st_register(struct st_proto_s *new_proto)
	long err = 0;
	unsigned long flags = 0;

	st_kim_ref(&st_gdata);
	st_kim_ref(&st_gdata, 0);
	pr_info("%s(%d) ", __func__, new_proto->type);
	if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
	    || new_proto->reg_complete_cb == NULL) {
@@ -713,7 +712,7 @@ long st_unregister(enum proto_type type)

	pr_debug("%s: %d ", __func__, type);

	st_kim_ref(&st_gdata);
	st_kim_ref(&st_gdata, 0);
	if (type < ST_BT || type >= ST_MAX) {
		pr_err(" protocol %d not supported", type);
		return -EPROTONOSUPPORT;
@@ -767,7 +766,7 @@ long st_write(struct sk_buff *skb)
#endif
	long len;

	st_kim_ref(&st_gdata);
	st_kim_ref(&st_gdata, 0);
	if (unlikely(skb == NULL || st_gdata == NULL
		|| st_gdata->tty == NULL)) {
		pr_err("data/tty unavailable to perform write");
@@ -818,7 +817,7 @@ static int st_tty_open(struct tty_struct *tty)
	struct st_data_s *st_gdata;
	pr_info("%s ", __func__);

	st_kim_ref(&st_gdata);
	st_kim_ref(&st_gdata, 0);
	st_gdata->tty = tty;
	tty->disc_data = st_gdata;

+1 −1
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ int st_core_init(struct st_data_s **);
void st_core_exit(struct st_data_s *);

/* ask for reference from KIM */
void st_kim_ref(struct st_data_s **);
void st_kim_ref(struct st_data_s **, int);

#define GPS_STUB_TEST
#ifdef GPS_STUB_TEST
+19 −3
Original line number Diff line number Diff line
@@ -72,10 +72,25 @@ const unsigned char *protocol_names[] = {
	PROTO_ENTRY(ST_GPS, "GPS"),
};

#define MAX_ST_DEVICES	3	/* Imagine 1 on each UART for now */
struct platform_device *st_kim_devices[MAX_ST_DEVICES];

/**********************************************************************/
/* internal functions */

/**
 * st_get_plat_device -
 *	function which returns the reference to the platform device
 *	requested by id. As of now only 1 such device exists (id=0)
 *	the context requesting for reference can get the id to be
 *	requested by a. The protocol driver which is registering or
 *	b. the tty device which is opened.
 */
static struct platform_device *st_get_plat_device(int id)
{
	return st_kim_devices[id];
}

/**
 * validate_firmware_response -
 *	function to return whether the firmware response was proper
@@ -353,7 +368,7 @@ void st_kim_chip_toggle(enum proto_type type, enum kim_gpio_state state)
	struct kim_data_s	*kim_gdata;
	pr_info(" %s ", __func__);

	kim_pdev = st_get_plat_device();
	kim_pdev = st_get_plat_device(0);
	kim_gdata = dev_get_drvdata(&kim_pdev->dev);

	if (kim_gdata->gpios[type] == -1) {
@@ -574,12 +589,12 @@ static int kim_toggle_radio(void *data, bool blocked)
 *	This would enable multiple such platform devices to exist
 *	on a given platform
 */
void st_kim_ref(struct st_data_s **core_data)
void st_kim_ref(struct st_data_s **core_data, int id)
{
	struct platform_device	*pdev;
	struct kim_data_s	*kim_gdata;
	/* get kim_gdata reference from platform device */
	pdev = st_get_plat_device();
	pdev = st_get_plat_device(id);
	kim_gdata = dev_get_drvdata(&pdev->dev);
	*core_data = kim_gdata->core_data;
}
@@ -623,6 +638,7 @@ static int kim_probe(struct platform_device *pdev)
	long *gpios = pdev->dev.platform_data;
	struct kim_data_s	*kim_gdata;

	st_kim_devices[pdev->id] = pdev;
	kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC);
	if (!kim_gdata) {
		pr_err("no mem to allocate");