diff options
Diffstat (limited to 'drivers/char/modem_interface/normal_mode.c')
| -rw-r--r-- | drivers/char/modem_interface/normal_mode.c | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/drivers/char/modem_interface/normal_mode.c b/drivers/char/modem_interface/normal_mode.c new file mode 100644 index 00000000..5ab8fb5e --- /dev/null +++ b/drivers/char/modem_interface/normal_mode.c @@ -0,0 +1,157 @@ +/* + * kernel/driver/char/modem_interface/normal_mode.c + * + * Generic modem interface GPIO handshake and dump memory process. + * + * Author: Jiayong Yang(Jiayong.Yang@spreadtrum.com) + * Created: Jul 27, 2012 + * Copyright: Spreadtrum Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/init.h> +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/semaphore.h> +#include <linux/delay.h> +#include "modem_buffer.h" +#include "modem_interface_driver.h" + +extern size_t Read_modem_data_ext(const unsigned char * buf, unsigned short len); + +extern void modem_intf_set_mode(enum MODEM_Mode_type mode,int force); +extern void modem_intf_ctrl_gpio_handle_bootcomp(int status); +extern void modem_intf_ctrl_gpio_handle_dump(int status); +extern void modem_intf_ctrl_gpio_handle_normal(int status); +extern void modem_intf_reboot_routine(void); + + +void shutdown_protocol(struct modem_message_node *msg) +{ + struct modem_intf_device * device; + + if((msg == NULL)||(msg->parameter1==0)) + return; + + printk(KERN_INFO ">>shutdown entry message: %s \n",modem_intf_msg_string(msg->type)); + + device = (struct modem_intf_device *)msg->parameter1; + + switch(msg->type) { + case MODEM_SET_MODE: + modem_intf_set_mode(msg->parameter2, 1); + device->status = 0; + device->out_transfering = 0; + break; + default: + break; + } +} + +void bootcomp_protocol(struct modem_message_node *msg) +{ + struct modem_intf_device * device; + + if((msg == NULL)||(msg->parameter1==0)) + return; + + printk(KERN_INFO ">>bootcomp entry message: %s \n",modem_intf_msg_string(msg->type)); + + device = (struct modem_intf_device *)msg->parameter1; + + switch(msg->type) { + case MODEM_CTRL_GPIO_CHG: + modem_intf_ctrl_gpio_handle_bootcomp(msg->parameter2); + break; + case MODEM_USER_REQ: + modem_intf_reboot_routine(); + break; + case MODEM_SET_MODE: + modem_intf_set_mode(msg->parameter2, 1); + device->status = 0; + device->out_transfering = 0; + break; + default: + break; + } +} + + +void dump_memory_protocol(struct modem_message_node *msg) +{ + struct modem_intf_device * device; + + if((msg == NULL)||(msg->parameter1==0)) + return; + + printk(KERN_INFO ">>dump entry message: %s \n",modem_intf_msg_string(msg->type)); + + device = (struct modem_intf_device *)msg->parameter1; + + switch(msg->type) { + case MODEM_CTRL_GPIO_CHG: + modem_intf_ctrl_gpio_handle_dump(msg->parameter2); + break; + case MODEM_USER_REQ: + modem_intf_reboot_routine(); + break; + case MODEM_SET_MODE: + modem_intf_set_mode(msg->parameter2, 1); + device->status = 0; + device->out_transfering = 0; + break; + default: + break; + } +} + +void reset_protocol(struct modem_message_node *msg) +{ + struct modem_intf_device * device; + + if((msg == NULL)||(msg->parameter1==0)) + return; + + printk(KERN_INFO ">>reset entry message: %s \n",modem_intf_msg_string(msg->type)); + + device = (struct modem_intf_device *)msg->parameter1; + + switch(msg->type) { + case MODEM_SET_MODE: + modem_intf_set_mode(msg->parameter2, 1); + device->status = 0; + device->out_transfering = 0; + break; + default: + break; + } +} + +void normal_protocol(struct modem_message_node *msg) +{ + struct modem_intf_device * device; + if((msg == NULL)||(msg->parameter1==0)) + return; + + printk(KERN_INFO ">>normal entry message: %s \n",modem_intf_msg_string(msg->type)); + + device = (struct modem_intf_device *)msg->parameter1; + + switch(msg->type) { + case MODEM_CTRL_GPIO_CHG: + modem_intf_ctrl_gpio_handle_normal(msg->parameter2); + break; + case MODEM_USER_REQ: + modem_intf_reboot_routine(); + break; + case MODEM_SET_MODE: + modem_intf_set_mode(msg->parameter2, 1); + device->status = 0; + device->out_transfering = 0; + break; + default: + break; + } +} |
