Loading drivers/gpu/msm/kgsl_pwrctrl.c +40 −0 Original line number Diff line number Diff line Loading @@ -753,6 +753,42 @@ static ssize_t kgsl_pwrctrl_force_rail_on_store(struct device *dev, return __force_on_store(dev, attr, buf, count, KGSL_PWRFLAGS_POWER_ON); } static ssize_t kgsl_pwrctrl_bus_split_show(struct device *dev, struct device_attribute *attr, char *buf) { struct kgsl_device *device = kgsl_device_from_dev(dev); if (device == NULL) return 0; return snprintf(buf, PAGE_SIZE, "%d\n", device->pwrctrl.bus_control); } static ssize_t kgsl_pwrctrl_bus_split_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char temp[20]; unsigned long val; struct kgsl_device *device = kgsl_device_from_dev(dev); int rc; if (device == NULL) return 0; snprintf(temp, sizeof(temp), "%.*s", (int)min(count, sizeof(temp) - 1), buf); rc = kstrtoul(temp, 0, &val); if (rc) return rc; mutex_lock(&device->mutex); device->pwrctrl.bus_control = val ? true : false; mutex_unlock(&device->mutex); return count; } DEVICE_ATTR(gpuclk, 0644, kgsl_pwrctrl_gpuclk_show, kgsl_pwrctrl_gpuclk_store); DEVICE_ATTR(max_gpuclk, 0644, kgsl_pwrctrl_max_gpuclk_show, kgsl_pwrctrl_max_gpuclk_store); Loading Loading @@ -792,6 +828,9 @@ DEVICE_ATTR(force_bus_on, 0644, DEVICE_ATTR(force_rail_on, 0644, kgsl_pwrctrl_force_rail_on_show, kgsl_pwrctrl_force_rail_on_store); DEVICE_ATTR(bus_split, 0644, kgsl_pwrctrl_bus_split_show, kgsl_pwrctrl_bus_split_store); static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_gpuclk, Loading @@ -809,6 +848,7 @@ static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_force_clk_on, &dev_attr_force_bus_on, &dev_attr_force_rail_on, &dev_attr_bus_split, NULL }; Loading drivers/gpu/msm/kgsl_pwrscale.c +1 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) level = i; break; } } else if (flags) { } else if (flags && pwr->bus_control) { /* * Signal for faster or slower bus. If KGSL isn't already * running at the desired speed for the given level, modify Loading Loading
drivers/gpu/msm/kgsl_pwrctrl.c +40 −0 Original line number Diff line number Diff line Loading @@ -753,6 +753,42 @@ static ssize_t kgsl_pwrctrl_force_rail_on_store(struct device *dev, return __force_on_store(dev, attr, buf, count, KGSL_PWRFLAGS_POWER_ON); } static ssize_t kgsl_pwrctrl_bus_split_show(struct device *dev, struct device_attribute *attr, char *buf) { struct kgsl_device *device = kgsl_device_from_dev(dev); if (device == NULL) return 0; return snprintf(buf, PAGE_SIZE, "%d\n", device->pwrctrl.bus_control); } static ssize_t kgsl_pwrctrl_bus_split_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char temp[20]; unsigned long val; struct kgsl_device *device = kgsl_device_from_dev(dev); int rc; if (device == NULL) return 0; snprintf(temp, sizeof(temp), "%.*s", (int)min(count, sizeof(temp) - 1), buf); rc = kstrtoul(temp, 0, &val); if (rc) return rc; mutex_lock(&device->mutex); device->pwrctrl.bus_control = val ? true : false; mutex_unlock(&device->mutex); return count; } DEVICE_ATTR(gpuclk, 0644, kgsl_pwrctrl_gpuclk_show, kgsl_pwrctrl_gpuclk_store); DEVICE_ATTR(max_gpuclk, 0644, kgsl_pwrctrl_max_gpuclk_show, kgsl_pwrctrl_max_gpuclk_store); Loading Loading @@ -792,6 +828,9 @@ DEVICE_ATTR(force_bus_on, 0644, DEVICE_ATTR(force_rail_on, 0644, kgsl_pwrctrl_force_rail_on_show, kgsl_pwrctrl_force_rail_on_store); DEVICE_ATTR(bus_split, 0644, kgsl_pwrctrl_bus_split_show, kgsl_pwrctrl_bus_split_store); static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_gpuclk, Loading @@ -809,6 +848,7 @@ static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_force_clk_on, &dev_attr_force_bus_on, &dev_attr_force_rail_on, &dev_attr_bus_split, NULL }; Loading
drivers/gpu/msm/kgsl_pwrscale.c +1 −1 Original line number Diff line number Diff line Loading @@ -208,7 +208,7 @@ int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) level = i; break; } } else if (flags) { } else if (flags && pwr->bus_control) { /* * Signal for faster or slower bus. If KGSL isn't already * running at the desired speed for the given level, modify Loading