void usb_init_device(void) { char functions[32] = {0}; /* Check if ADB was activated in bootloader */ sysfs_get_string("/sys/class/android_usb/android0/functions", functions, sizeof(functions)); adb_mode = (strstr(functions, "adb") == NULL) ? false : true; usb_enable(false); if (adb_mode) { sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage,adb"); sysfs_set_string("/sys/class/android_usb/android0/idVendor", "18D1"); sysfs_set_string("/sys/class/android_usb/android0/idProduct", "D002"); } else { sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage"); sysfs_set_string("/sys/class/android_usb/android0/idVendor", "C502"); sysfs_set_string("/sys/class/android_usb/android0/idProduct", "0029"); } sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org"); sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player"); sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "Agptek Rocker 0100"); }
static int sysfs_get_value(struct pci_dev *d, char *object) { char buf[OBJBUFSIZE]; sysfs_get_string(d, object, buf, 1); return strtol(buf, NULL, 0); }
/***************************************************************************** * Before calling scan_tzones, thermal sysfs must be probed to determine * the number of thermal zones and cooling devices. * We loop through each thermal zone and fill in tz_info struct, i.e. * ptdata.tzi[] root@jacob-chiefriver:~# tree -d /sys/class/thermal/thermal_zone0 /sys/class/thermal/thermal_zone0 |-- cdev0 -> ../cooling_device4 |-- cdev1 -> ../cooling_device3 |-- cdev10 -> ../cooling_device7 |-- cdev11 -> ../cooling_device6 |-- cdev12 -> ../cooling_device5 |-- cdev2 -> ../cooling_device2 |-- cdev3 -> ../cooling_device1 |-- cdev4 -> ../cooling_device0 |-- cdev5 -> ../cooling_device12 |-- cdev6 -> ../cooling_device11 |-- cdev7 -> ../cooling_device10 |-- cdev8 -> ../cooling_device9 |-- cdev9 -> ../cooling_device8 |-- device -> ../../../LNXSYSTM:00/device:62/LNXTHERM:00 |-- power `-- subsystem -> ../../../../class/thermal *****************************************************************************/ static int scan_tzones(void) { DIR *dir; struct dirent **namelist; char tz_name[256]; int i, j, n, k = 0; if (!ptdata.nr_tz_sensor) return -1; for (i = 0; i <= ptdata.max_tz_instance; i++) { memset(tz_name, 0, sizeof(tz_name)); snprintf(tz_name, 256, "%s/%s%d", THERMAL_SYSFS, TZONE, i); dir = opendir(tz_name); if (!dir) { syslog(LOG_INFO, "Thermal zone %s skipped\n", tz_name); continue; } /* keep track of valid tzones */ n = scandir(tz_name, &namelist, 0, alphasort); if (n < 0) syslog(LOG_ERR, "scandir failed in %s", tz_name); else { sysfs_get_string(tz_name, "type", ptdata.tzi[k].type); ptdata.tzi[k].instance = i; /* detect trip points and cdev attached to this tzone */ j = 0; /* index for cdev */ ptdata.tzi[k].nr_cdev = 0; ptdata.tzi[k].nr_trip_pts = 0; while (n--) { char *temp_str; if (find_tzone_tp(tz_name, namelist[n]->d_name, &ptdata.tzi[k], k)) break; temp_str = strstr(namelist[n]->d_name, "cdev"); if (!temp_str) { free(namelist[n]); continue; } if (!find_tzone_cdev(namelist[n], tz_name, &ptdata.tzi[k], i, j)) j++; /* increment cdev index */ free(namelist[n]); } free(namelist); } /*TODO: reverse trip points */ closedir(dir); syslog(LOG_INFO, "TZ %d has %d cdev\n", i, ptdata.tzi[k].nr_cdev); k++; } return 0; }
static int sysfs_get_value(struct pci_dev *d, char *object, int mandatory) { char buf[OBJBUFSIZE]; if (sysfs_get_string(d, object, buf, mandatory)) return strtol(buf, NULL, 0); else return -1; }
/* get states of the cooling device instance */ static int probe_cdev(struct cdev_info *cdi, char *path) { sysfs_get_string(path, "type", cdi->type); sysfs_get_ulong(path, "max_state", &cdi->max_state); sysfs_get_ulong(path, "cur_state", &cdi->cur_state); syslog(LOG_INFO, "%s: %s: type %s, max %lu, curr %lu inst %d\n", __func__, path, cdi->type, cdi->max_state, cdi->cur_state, cdi->instance); return 0; }
static int scan_cdevs(void) { DIR *dir; struct dirent **namelist; char cdev_name[256]; int i, n, k = 0; if (!ptdata.nr_cooling_dev) { fprintf(stderr, "No cooling devices found\n"); return 0; } for (i = 0; i <= ptdata.max_cdev_instance; i++) { memset(cdev_name, 0, sizeof(cdev_name)); snprintf(cdev_name, 256, "%s/%s%d", THERMAL_SYSFS, CDEV, i); dir = opendir(cdev_name); if (!dir) { syslog(LOG_INFO, "Cooling dev %s skipped\n", cdev_name); /* there is a gap in cooling device id, check again * for the same index. */ continue; } n = scandir(cdev_name, &namelist, 0, alphasort); if (n < 0) syslog(LOG_ERR, "scandir failed in %s", cdev_name); else { sysfs_get_string(cdev_name, "type", ptdata.cdi[k].type); ptdata.cdi[k].instance = i; if (strstr(ptdata.cdi[k].type, ctrl_cdev)) { ptdata.cdi[k].flag |= CDEV_FLAG_IN_CONTROL; syslog(LOG_DEBUG, "control cdev id %d\n", i); } while (n--) free(namelist[n]); free(namelist); } closedir(dir); k++; } return 0; }
/* scan and fill in trip point info for a thermal zone and trip point id */ static int get_trip_point_data(char *tz_path, int tzid, int tpid) { char filename[256]; char temp_str[256]; int trip_type; if (tpid >= MAX_NR_TRIP) return -EINVAL; /* check trip point type */ snprintf(filename, sizeof(filename), "trip_point_%d_type", tpid); sysfs_get_string(tz_path, filename, temp_str); trip_type = str_to_trip_type(temp_str); if (trip_type < 0) { syslog(LOG_ERR, "%s:%s no matching type\n", __func__, temp_str); return -ENOENT; } ptdata.tzi[tzid].tp[tpid].type = trip_type; syslog(LOG_INFO, "%s:tz:%d tp:%d:type:%s type id %d\n", __func__, tzid, tpid, temp_str, trip_type); /* TODO: check attribute */ return 0; }