diff --git a/drivers/leds/mynode.c b/drivers/leds/mynode.c
index 3e67260d0c31..2ad3d80db8f5 100755
--- a/drivers/leds/mynode.c
+++ b/drivers/leds/mynode.c
@@ -18,9 +18,13 @@
#include <linux/delay.h>
#define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
-
//add by lzp for gpio control API
+extern void set_gpio_direction(int num, int flag);
extern int get_gpio_level(int num);
+extern void set_gpio_level(int num, int level);
+extern int rk_vendor_read(u32 id, void *pbuf, u32 size);
+extern int rk_vendor_write(u32 id, void *pbuf, u32 size);
+//
struct myedid {
unsigned int clock;
unsigned int hdisplay;
@@ -192,14 +196,109 @@ static ssize_t show_gpiovalue(struct device *dev, struct device_attribute *attr,
int a0,a1,a2;
a0 = get_gpio_level(0);
a1 = get_gpio_level(1);
- a2 = get_gpio_level(2);
- count += snprintf(buf + count, PAGE_SIZE - count, "%d,%d,%d\n",a0,a1,a2);
+ a2 = get_gpio_level(2);
+ count += snprintf(buf + count, PAGE_SIZE - count, "%d,%d,%d\n",a0,a1,a2);
+
return count;
}
+
+static ssize_t store_gpiovalue(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+ char dest[3] = {""};
+
+ if (count <= 0)
+ return 0;
+
+ strncpy(dest, buf, 2);
+ printk("===>LZP %s\n",dest);
+
+ if (strncmp(dest,"00",strlen(dest)) == 0){
+ set_gpio_level(0,0);
+ }
+ if (strncmp(dest,"10",strlen(dest)) == 0){
+ set_gpio_level(1,0);
+ }
+ if (strncmp(dest,"20",strlen(dest)) == 0){
+ set_gpio_level(2,0);
+ }
+
+
+ if (strncmp(dest,"01",strlen(dest)) == 0){
+ set_gpio_level(0,1);
+ }
+ if (strncmp(dest,"11",strlen(dest)) == 0){
+ set_gpio_level(1,1);
+ }
+ if (strncmp(dest,"21",strlen(dest)) == 0){
+ set_gpio_level(2,1);
+ }
+
+
+ return count;
+
+}
+
+static ssize_t store_gpiodirection(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+ char dest[3] = {""};
+
+ if (count <= 0)
+ return 0;
+
+ strncpy(dest, buf, 2);
+ printk("===>LZP %s\n",dest);
+
+ if (strncmp(dest,"00",strlen(dest)) == 0){
+ set_gpio_direction(0,0);
+ }
+ if (strncmp(dest,"10",strlen(dest)) == 0){
+ set_gpio_direction(1,0);
+ }
+ if (strncmp(dest,"20",strlen(dest)) == 0){
+ set_gpio_direction(2,0);
+ }
+ if (strncmp(dest,"01",strlen(dest)) == 0){
+ set_gpio_direction(0,1);
+ }
+ if (strncmp(dest,"11",strlen(dest)) == 0){
+ set_gpio_direction(1,1);
+ }
+ if (strncmp(dest,"21",strlen(dest)) == 0){
+ set_gpio_direction(2,1);
+ }
+
+ return count;
+}
+
+static ssize_t store_camera(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+ unsigned char data[2];
+
+ if (count <= 0)
+ return 0;
+
+ data[0] = simple_strtoul(buf, NULL, 0);
+ rk_vendor_write(8, data, 1);
+
+ return count;
+}
+
+static ssize_t show_camera(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ int count = 0;
+ unsigned char data[2];
+ rk_vendor_read(8, data, 1);
+
+ count = sprintf(buf, "%d\n",data[0]);
+ return count;
+}
+
+
+static DEVICE_ATTR(gpiodirection, 0666, NULL, store_gpiodirection);
static DEVICE_ATTR(mytiming, 0666, show_mytiming, NULL);
static DEVICE_ATTR(hdmiin_id, 0666, show_hdmiin_id, store_hdmiin_id);
-static DEVICE_ATTR(gpiovalue, 0666, show_gpiovalue, NULL);
-
+static DEVICE_ATTR(gpiovalue, 0666, show_gpiovalue, store_gpiovalue);
+static DEVICE_ATTR(camera, 0666,show_camera,store_camera);
struct file_operations mynode_ops={
.owner = THIS_MODULE,
};
@@ -221,6 +320,10 @@ static int mynode_init(void)
return -1;
if(sysfs_create_file(&(mydev->kobj), &dev_attr_gpiovalue.attr))
return -1;
+ if(sysfs_create_file(&(mydev->kobj), &dev_attr_gpiodirection.attr))
+ return -1;
+ if(sysfs_create_file(&(mydev->kobj), &dev_attr_camera.attr))
+ return -1;
for (i=0; i<50; i++){
mydata[i].clock = 0;
mydata[i].hdisplay = 0;
(END)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
old mode 100644
new mode 100755
index f20524695839..dc1c9b1195fb
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -36,6 +36,9 @@
#define USB_VENDOR_GENESYS_LOGIC 0x05e3
#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01
+unsigned char idata[2];
+extern int rk_vendor_read(u32 id, void *pbuf, u32 size);
+
/* Protect struct usb_device->state and ->children members
* Note: Both are also protected by ->dev.sem, except that ->state can
* change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */
@@ -2422,6 +2425,21 @@ int usb_new_device(struct usb_device *udev)
/* Tell the world! */
announce_device(udev);
+ rk_vendor_read(8, idata, 1);
+ if (idata[0] > 1 || idata[0] < 0 ){
+ idata[0] = 1;
+ }
+ if (!idata[0]){
+ if ((le16_to_cpu(udev->descriptor.idVendor) == 0x1bcf &&
+ le16_to_cpu(udev->descriptor.idProduct) == 0x2cc8) ||(le16_to_cpu(udev->descriptor.idVendor) == 0x15aa &&
+ le16_to_cpu(udev->descriptor.idProduct) == 0x1555) ){
+ dev_err(&udev->dev, "this device will del.\n");
+ goto fail;
+ }
+ }
+ //
+
if (udev->serial)
add_device_randomness(udev->serial, strlen(udev->serial));
if (udev->product)
在kernel判断某个USB设备VID、PID默认是否注册,在应用层通过节点写入value控制是否禁用usb设备
diff --git a/src/com/android/settings/SpecialmoduleSetting.java b/src/com/android/settings/SpecialmoduleSetting.java
index 9e2197c3ec..d097670dad 100755
--- a/src/com/android/settings/SpecialmoduleSetting.java
+++ b/src/com/android/settings/SpecialmoduleSetting.java
@@ -81,6 +81,7 @@ public class SpecialmoduleSetting extends SettingsPreferenceFragment implements
private static final String KEY_WOL_FUNCTION ="wol_function";
private static final String KEY_CAMERA_DISPLAY = "camera_display";
private static final String KEY_SCREEN_BRIGHTNESS = "screen_brightness";
+ private static final String KEY_CAMERA_ENABLE = "camera_enable";^M
private CheckBoxPreference advertisements, navigationbar ,cleansystem ,autoLogCatch;
private Preference advanceSettings;
@@ -111,6 +112,7 @@ public class SpecialmoduleSetting extends SettingsPreferenceFragment implements
private SharedPreferences sp;
private int lastSelect = -1;
private ListPreference mCameraPreference;
+ private ListPreference mCameraEnablePreference;^M
@Override
@@ -217,6 +219,19 @@ public class SpecialmoduleSetting extends SettingsPreferenceFragment implements
mControlBrightness.setOnPreferenceChangeListener(this);
mControlBrightness.setChecked(Settings.System.getInt(mContext.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_BUTTON,0)==1);
+ mCameraEnablePreference = (ListPreference)findPreference(KEY_CAMERA_ENABLE);^M
+ mCameraEnablePreference.setOnPreferenceChangeListener(this);^M
+ boolean cameraEnable11 = Settings.System.getInt(mContext.getContentResolver(), Settings.System.CAMERA_ENABLE, 0) == 1;^M
+ if(cameraEnable11 ){^M
+ mCameraEnablePreference.setSummary(R.string.enablecamera);^M
+ mCameraEnablePreference.setValue("0");^M
+ ^M
+ }else{^M
+ mCameraEnablePreference.setSummary(R.string.removecamera);^M
+ mCameraEnablePreference.setValue("1");^M
+ ^M
+ }^M
+ ^M
}
@@ -270,6 +285,59 @@ public class SpecialmoduleSetting extends SettingsPreferenceFragment implements
},2000);
}
+ }else if(preference == mCameraEnablePreference ){^M
+ String cameraview1 = newValue.toString();^M
+ mCameraEnablePreference.setSummary(cameraview1);^M
+ mCameraEnablePreference.setValue(cameraview1);^M
+ if(cameraview1 != null && cameraview1.equals("0") ){^M
+ Settings.System.putInt(mContext.getContentResolver(), Settings.System.CAMERA_ENABLE, 1);^M
+ ProgressDialog dialog = new ProgressDialog(mContext);^M
+ dialog.setTitle(getResources().getString(R.string.camera));^M
+ dialog.setMessage(getResources().getString(R.string.camera_dialog_content));^M
+ dialog.setCancelable(false);^M
+ dialog.setCanceledOnTouchOutside(false);^M
+ dialog.show();^M
+ new Handler().postDelayed(new Runnable() {^M
+ @Override^M
+ public void run() {^M
+ write_camera("1");^M
+ Intent reboot = new Intent("android.intent.action.REBOOT");^M
+ // <C1><A2><BC><B4><D6><D8><C6><F4><A3><BA>1^M
+ reboot.putExtra("nowait", 1);^M
+ // <D6><D8><C6><F4><B4><CE><CA><FD><A3><BA>1^M
+ reboot.putExtra("interval", 1);^M
+ // <B2><BB><B3><F6><CF>ֵ<AF><B4><B0><A3><BA>0^M
+ reboot.putExtra("window", 0);^M
+ startActivity(reboot);^M
+ }^M
+ },2000); ^M
+ }else if(cameraview1 != null && cameraview1.equals("1") ){^M
+ ^M
+ Settings.System.putInt(mContext.getContentResolver(), Settings.System.CAMERA_ENABLE, 0);^M
+ ProgressDialog dialog = new ProgressDialog(mContext);^M
+ dialog.setTitle(getResources().getString(R.string.camera));^M
+ dialog.setMessage(getResources().getString(R.string.camera_dialog_content));^M
+ dialog.setCancelable(false);^M
+ dialog.setCanceledOnTouchOutside(false);^M
+ dialog.show();^M
+ new Handler().postDelayed(new Runnable() {^M
+ ^M
+ @Override^M
+ public void run() {^M
+ ^M
+ write_camera("0");^M
+ Intent reboot = new Intent("android.intent.action.REBOOT");^M
+ // <C1><A2><BC><B4><D6><D8><C6><F4><A3><BA>1^M
+ reboot.putExtra("nowait", 1);^M
+ // <D6><D8><C6><F4><B4><CE><CA><FD><A3><BA>1^M
+ reboot.putExtra("interval", 1);^M
+ // <B2><BB><B3><F6><CF>ֵ<AF><B4><B0><A3><BA>0^M
+ reboot.putExtra("window", 0);^M
+ startActivity(reboot);^M
+ }^M
+ },2000); ^M
+ }^M
+ ^M
}
return true;
}
@@ -568,6 +636,21 @@ public class SpecialmoduleSetting extends SettingsPreferenceFragment implements
}
}
+ ^M
+ private void write_camera( String value){^M
+ File file = new File("/sys/class/mynode_class/mynode_device/camera");^M
+ if (file.exists()){^M
+ try{^M
+ OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");^M
+ BufferedWriter out = new BufferedWriter(write);^M
+ out.write(value);^M
+ out.flush();^M
+ out.close();^M
+ }catch(IOException e){^M
+ }^M
+ ^M
+ }^M
+ }^M
@Override
protected int getMetricsCategory() {