Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 235479
b: refs/heads/master
c: 781a739
h: refs/heads/master
i:
  235477: 482aca5
  235475: a453f61
  235471: a64623c
v: v3
  • Loading branch information
Pavan Savoy authored and Greg Kroah-Hartman committed Feb 4, 2011
1 parent b284376 commit 26a8439
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 122 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6d71ba2105a1d8c1712cdfcf46fc6040e4707cb9
refs/heads/master: 781a7395d239dbdb59738ca7fe08e71641bf583c
11 changes: 0 additions & 11 deletions trunk/drivers/misc/ti-st/st_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,6 @@ long st_register(struct st_proto_s *new_proto)
if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) {
pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->chnl_id);
/* fw download in progress */
st_kim_chip_toggle(new_proto->chnl_id, KIM_GPIO_ACTIVE);

add_channel_to_table(st_gdata, new_proto);
st_gdata->protos_registered++;
Expand Down Expand Up @@ -548,10 +547,6 @@ long st_register(struct st_proto_s *new_proto)
return -EINVAL;
}

/* the chnl_id might require other gpios to be toggled
*/
st_kim_chip_toggle(new_proto->chnl_id, KIM_GPIO_ACTIVE);

clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
st_recv = st_int_recv;

Expand Down Expand Up @@ -622,12 +617,6 @@ long st_unregister(struct st_proto_s *proto)

st_gdata->protos_registered--;
remove_channel_from_table(st_gdata, proto);

/* kim ignores BT in the below function
* and handles the rest, BT is toggled
* only in kim_start and kim_stop
*/
st_kim_chip_toggle(proto->chnl_id, KIM_GPIO_INACTIVE);
spin_unlock_irqrestore(&st_gdata->lock, flags);

if ((st_gdata->protos_registered == ST_EMPTY) &&
Expand Down
117 changes: 24 additions & 93 deletions trunk/drivers/misc/ti-st/st_kim.c
Original file line number Diff line number Diff line change
Expand Up @@ -390,49 +390,6 @@ static long download_firmware(struct kim_data_s *kim_gdata)

/**********************************************************************/
/* functions called from ST core */
/* function to toggle the GPIO
* needs to know whether the GPIO is active high or active low
*/
void st_kim_chip_toggle(enum proto_type type, enum kim_gpio_state state)
{
struct platform_device *kim_pdev;
struct kim_data_s *kim_gdata;
pr_info(" %s ", __func__);

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

if (kim_gdata->gpios[type] == -1) {
pr_info("gpio not requested for protocol %d", type);
return;
}
switch (type) {
case ST_BT:
/*Do Nothing */
break;

case ST_FM:
if (state == KIM_GPIO_ACTIVE)
gpio_set_value(kim_gdata->gpios[ST_FM], GPIO_LOW);
else
gpio_set_value(kim_gdata->gpios[ST_FM], GPIO_HIGH);
break;

case ST_GPS:
if (state == KIM_GPIO_ACTIVE)
gpio_set_value(kim_gdata->gpios[ST_GPS], GPIO_HIGH);
else
gpio_set_value(kim_gdata->gpios[ST_GPS], GPIO_LOW);
break;

case ST_MAX_CHANNELS:
default:
break;
}

return;
}

/* called from ST Core, when REG_IN_PROGRESS (registration in progress)
* can be because of
* 1. response to read local version
Expand Down Expand Up @@ -482,9 +439,9 @@ long st_kim_start(void *kim_data)

do {
/* Configure BT nShutdown to HIGH state */
gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW);
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
mdelay(5); /* FIXME: a proper toggle */
gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_HIGH);
gpio_set_value(kim_gdata->nshutdown, GPIO_HIGH);
mdelay(100);
/* re-initialize the completion */
INIT_COMPLETION(kim_gdata->ldisc_installed);
Expand Down Expand Up @@ -552,11 +509,11 @@ long st_kim_stop(void *kim_data)
}

/* By default configure BT nShutdown to LOW state */
gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW);
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
mdelay(1);
gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_HIGH);
gpio_set_value(kim_gdata->nshutdown, GPIO_HIGH);
mdelay(1);
gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW);
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
return err;
}

Expand Down Expand Up @@ -685,10 +642,8 @@ struct dentry *kim_debugfs_dir;
static int kim_probe(struct platform_device *pdev)
{
long status;
long proto;
struct kim_data_s *kim_gdata;
struct ti_st_plat_data *pdata = pdev->dev.platform_data;
long *gpios = pdata->gpios;

if ((pdev->id != -1) && (pdev->id < MAX_ST_DEVICES)) {
/* multiple devices could exist */
Expand All @@ -713,40 +668,19 @@ static int kim_probe(struct platform_device *pdev)
/* refer to itself */
kim_gdata->core_data->kim_data = kim_gdata;

for (proto = 0; proto < ST_MAX_CHANNELS; proto++) {
kim_gdata->gpios[proto] = gpios[proto];
pr_info(" %ld gpio to be requested", gpios[proto]);
/* Claim the chip enable nShutdown gpio from the system */
kim_gdata->nshutdown = pdata->nshutdown_gpio;
status = gpio_request(kim_gdata->nshutdown, "kim");
if (unlikely(status)) {
pr_err(" gpio %ld request failed ", kim_gdata->nshutdown);
return status;
}

for (proto = 0; (proto < ST_MAX_CHANNELS)
&& (gpios[proto] != -1); proto++) {
/* Claim the Bluetooth/FM/GPIO
* nShutdown gpio from the system
*/
status = gpio_request(gpios[proto], "kim");
if (unlikely(status)) {
pr_err(" gpio %ld request failed ", gpios[proto]);
proto -= 1;
while (proto >= 0) {
if (gpios[proto] != -1)
gpio_free(gpios[proto]);
}
return status;
}

/* Configure nShutdown GPIO as output=0 */
status =
gpio_direction_output(gpios[proto], 0);
if (unlikely(status)) {
pr_err(" unable to configure gpio %ld",
gpios[proto]);
proto -= 1;
while (proto >= 0) {
if (gpios[proto] != -1)
gpio_free(gpios[proto]);
}
return status;
}
/* Configure nShutdown GPIO as output=0 */
status = gpio_direction_output(kim_gdata->nshutdown, 0);
if (unlikely(status)) {
pr_err(" unable to configure gpio %ld", kim_gdata->nshutdown);
return status;
}
/* get reference of pdev for request_firmware
*/
Expand Down Expand Up @@ -785,23 +719,20 @@ static int kim_remove(struct platform_device *pdev)
{
/* free the GPIOs requested */
struct ti_st_plat_data *pdata = pdev->dev.platform_data;
long *gpios = pdata->gpios;
long proto;
struct kim_data_s *kim_gdata;

kim_gdata = dev_get_drvdata(&pdev->dev);

for (proto = 0; (proto < ST_MAX_CHANNELS)
&& (gpios[proto] != -1); proto++) {
/* Claim the Bluetooth/FM/GPIO
* nShutdown gpio from the system
*/
gpio_free(gpios[proto]);
}
pr_info("kim: GPIO Freed");
debugfs_remove_recursive(kim_debugfs_dir);
/* Free the Bluetooth/FM/GPIO
* nShutdown gpio from the system
*/
gpio_free(pdata->nshutdown_gpio);
pr_info("nshutdown GPIO Freed");

debugfs_remove_recursive(kim_debugfs_dir);
sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
pr_info("sysfs entries removed");

kim_gdata->kim_pdev = NULL;
st_core_exit(kim_gdata->core_data);

Expand Down
19 changes: 2 additions & 17 deletions trunk/include/linux/ti_wilink_st.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,6 @@
#ifndef TI_WILINK_ST_H
#define TI_WILINK_ST_H

/**
* enum kim_gpio_state - Few protocols such as FM have ACTIVE LOW
* gpio states for their chip/core enable gpios
*/
enum kim_gpio_state {
KIM_GPIO_INACTIVE,
KIM_GPIO_ACTIVE,
};

/**
* enum proto-type - The protocol on WiLink chips which share a
* common physical interface like UART.
Expand Down Expand Up @@ -252,14 +243,11 @@ struct chip_version {
* the ldisc was properly installed.
* @resp_buffer: data buffer for the .bts fw file name.
* @fw_entry: firmware class struct to request/release the fw.
* @gpios: the list of core/chip enable gpios for BT, FM and GPS cores.
* @rx_state: the rx state for kim's receive func during fw download.
* @rx_count: the rx count for the kim's receive func during fw download.
* @rx_skb: all of fw data might not come at once, and hence data storage for
* whole of the fw response, only HCI_EVENTs and hence diff from ST's
* response.
* @rfkill: rfkill data for each of the cores to be registered with rfkill.
* @rf_protos: proto types of the data registered with rfkill sub-system.
* @core_data: ST core's data, which mainly is the tty's disc_data
* @version: chip version available via a sysfs entry.
*
Expand All @@ -270,12 +258,10 @@ struct kim_data_s {
struct completion kim_rcvd, ldisc_installed;
char resp_buffer[30];
const struct firmware *fw_entry;
long gpios[ST_MAX_CHANNELS];
long nshutdown;
unsigned long rx_state;
unsigned long rx_count;
struct sk_buff *rx_skb;
struct rfkill *rfkill[ST_MAX_CHANNELS];
enum proto_type rf_protos[ST_MAX_CHANNELS];
struct st_data_s *core_data;
struct chip_version version;
unsigned char ldisc_install;
Expand All @@ -293,7 +279,6 @@ long st_kim_start(void *);
long st_kim_stop(void *);

void st_kim_recv(void *, const unsigned char *, long count);
void st_kim_chip_toggle(enum proto_type, enum kim_gpio_state);
void st_kim_complete(void *);
void kim_st_list_protocols(struct st_data_s *, void *);

Expand Down Expand Up @@ -426,7 +411,7 @@ struct gps_event_hdr {

/* platform data */
struct ti_st_plat_data {
long gpios[ST_MAX_CHANNELS]; /* BT, FM and GPS */
long nshutdown_gpio;
unsigned char dev_name[UART_DEV_NAME_LEN]; /* uart name */
unsigned char flow_cntrl; /* flow control flag */
unsigned long baud_rate;
Expand Down

0 comments on commit 26a8439

Please sign in to comment.