diff options
author | Kevin | 2014-11-15 10:00:36 +0800 |
---|---|---|
committer | Kevin | 2014-11-15 10:00:36 +0800 |
commit | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (patch) | |
tree | de942df665fac4bac0d9cb7ae86910fe937b0c1a /ANDROID_3.4.5/drivers/usb/gadget/android.c | |
parent | 392e8802486cb573b916e746010e141a75f507e6 (diff) | |
download | FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.tar.gz FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.tar.bz2 FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.zip |
add via modify part source code for wm8880 4.4 kitkat
Diffstat (limited to 'ANDROID_3.4.5/drivers/usb/gadget/android.c')
-rw-r--r-- | ANDROID_3.4.5/drivers/usb/gadget/android.c | 128 |
1 files changed, 127 insertions, 1 deletions
diff --git a/ANDROID_3.4.5/drivers/usb/gadget/android.c b/ANDROID_3.4.5/drivers/usb/gadget/android.c index 4e73bf1a..c5ce536a 100644 --- a/ANDROID_3.4.5/drivers/usb/gadget/android.c +++ b/ANDROID_3.4.5/drivers/usb/gadget/android.c @@ -28,6 +28,8 @@ #include <linux/usb/composite.h> #include <linux/usb/gadget.h> +#include <linux/power/wmt_battery.h> + #include "gadget_chips.h" /* @@ -54,6 +56,7 @@ #include "f_rndis.c" #include "rndis.c" #include "u_ether.c" +#include "f_rawbulk.c" MODULE_AUTHOR("Mike Lockwood"); MODULE_DESCRIPTION("Android Composite USB Driver"); @@ -62,6 +65,9 @@ MODULE_VERSION("1.0"); static const char longname[] = "Gadget Android"; +extern int wmt_getsyspara(char *varname, unsigned char *varval, int *varlen); +extern int wmt_setsyspara(char *varname, char *varval); + /* Default vendor and product IDs, overridden by userspace */ #define VENDOR_ID 0x18D1 #define PRODUCT_ID 0x0001 @@ -215,6 +221,7 @@ static void android_disable(struct android_dev *dev) /* Cancel pending control requests */ usb_ep_dequeue(cdev->gadget->ep0, cdev->req); usb_remove_config(cdev, &android_config_driver); + usb_ep_autoconfig_reset(cdev->gadget); } } @@ -917,6 +924,86 @@ static struct android_usb_function accessory_function = { .bind_config = accessory_function_bind_config, .ctrlrequest = accessory_function_ctrlrequest, }; +#define CONFIG_USB_ANDROID_RAWBULK 1 + +/* VIA Rawbulk functions */ +#ifdef CONFIG_USB_ANDROID_RAWBULK +static int rawbulk_function_init(struct android_usb_function *f, + struct usb_composite_dev *cdev) +{ + return 0; +} + +static void rawbulk_function_cleanup(struct android_usb_function *f) +{ + ; +} + +static int rawbulk_function_bind_config(struct android_usb_function *f, + struct usb_configuration *c) +{ + char *i = f->name + strlen("via_"); + if (!strncmp(i, "modem", 5)) + return rawbulk_bind_config(c, RAWBULK_TID_MODEM); + else if (!strncmp(i, "ets", 3)) + return rawbulk_bind_config(c, RAWBULK_TID_ETS); + else if (!strncmp(i, "atc", 3)) + return rawbulk_bind_config(c, RAWBULK_TID_AT); + else if (!strncmp(i, "pcv", 3)) + return rawbulk_bind_config(c, RAWBULK_TID_PCV); + else if (!strncmp(i, "gps", 3)) + return rawbulk_bind_config(c, RAWBULK_TID_GPS); + return -EINVAL; +} + +static int rawbulk_function_modem_ctrlrequest(struct android_usb_function *f, + struct usb_composite_dev *cdev, + const struct usb_ctrlrequest *c) +{ + if ((c->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE && + (c->bRequestType & USB_TYPE_MASK) == USB_TYPE_VENDOR) { + struct rawbulk_function *fn = rawbulk_lookup_function(RAWBULK_TID_MODEM); + return rawbulk_function_setup(&fn->function, c); + } + return -1; +} + +static struct android_usb_function rawbulk_modem_function = { + .name = "via_modem", + .init = rawbulk_function_init, + .cleanup = rawbulk_function_cleanup, + .bind_config = rawbulk_function_bind_config, + .ctrlrequest = rawbulk_function_modem_ctrlrequest, +}; + +static struct android_usb_function rawbulk_ets_function = { + .name = "via_ets", + .init = rawbulk_function_init, + .cleanup = rawbulk_function_cleanup, + .bind_config = rawbulk_function_bind_config, +}; + +static struct android_usb_function rawbulk_atc_function = { + .name = "via_atc", + .init = rawbulk_function_init, + .cleanup = rawbulk_function_cleanup, + .bind_config = rawbulk_function_bind_config, +}; + +static struct android_usb_function rawbulk_pcv_function = { + .name = "via_pcv", + .init = rawbulk_function_init, + .cleanup = rawbulk_function_cleanup, + .bind_config = rawbulk_function_bind_config, +}; + +static struct android_usb_function rawbulk_gps_function = { + .name = "via_gps", + .init = rawbulk_function_init, + .cleanup = rawbulk_function_cleanup, + .bind_config = rawbulk_function_bind_config, +}; +#endif /* CONFIG_USB_ANDROID_RAWBULK */ static int audio_source_function_init(struct android_usb_function *f, struct usb_composite_dev *cdev) @@ -990,6 +1077,11 @@ static struct android_usb_function *supported_functions[] = { &mass_storage_function, &accessory_function, &audio_source_function, + &rawbulk_modem_function, + &rawbulk_ets_function, + &rawbulk_atc_function, + &rawbulk_pcv_function, + &rawbulk_gps_function, NULL }; @@ -1356,6 +1448,23 @@ static void android_unbind_config(struct usb_configuration *c) android_unbind_enabled_functions(dev, c); } +unsigned char buf_android_serialno[32]; + +int get_android_serialno(void) +{ + int varlen =127; + int retval; + memset(buf_android_serialno,0,sizeof(buf_android_serialno)); + retval = wmt_getsyspara("androidboot.serialno", buf_android_serialno, &varlen); + if(!retval) + { + printk("androidboot.serialno=%s\n",buf_android_serialno); + return 0x0; + }else{ + printk("uboot variant androidboot.serialno do not exit\n"); + return -1; + } +} static int android_bind(struct usb_composite_dev *cdev) { @@ -1391,7 +1500,15 @@ static int android_bind(struct usb_composite_dev *cdev) /* Default strings - should be updated by userspace */ strncpy(manufacturer_string, "Android", sizeof(manufacturer_string)-1); strncpy(product_string, "Android", sizeof(product_string) - 1); - strncpy(serial_string, "0123456789ABCDEF", sizeof(serial_string) - 1); + + get_android_serialno(); + if(strlen(buf_android_serialno)==0){ + strncpy(serial_string, "0123456789ABCDEF", sizeof(serial_string) - 1); + printk("buf_android_serialno is null\n"); + }else{ + strncpy(serial_string, buf_android_serialno, sizeof(serial_string) - 1); + printk("buf_android_serialno:%s\n",buf_android_serialno); + } id = usb_string_id(cdev); if (id < 0) @@ -1467,6 +1584,9 @@ android_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *c) if (!dev->connected) { dev->connected = 1; schedule_work(&dev->work); +#if defined(CONFIG_BATTERY_WMT) + wmt_do_pc_connected(); +#endif } else if (c->bRequest == USB_REQ_SET_CONFIGURATION && cdev->config) { schedule_work(&dev->work); @@ -1518,6 +1638,12 @@ static int android_create_device(struct android_dev *dev) return 0; } +/* provide usb connected state for charger */ +int wmt_is_pc_connected(void) +{ + return _android_dev ? _android_dev->connected : 0; +} +EXPORT_SYMBOL(wmt_is_pc_connected); static int __init init(void) { |