/* * kgsl_pwrscale_init - Initialize pwrscale. * @dev: The device * @governor: The initial governor to use. * * Initialize devfreq and any non-constant profile data. */ int kgsl_pwrscale_init(struct device *dev, const char *governor) { struct kgsl_device *device; struct kgsl_pwrscale *pwrscale; struct kgsl_pwrctrl *pwr; struct devfreq *devfreq; struct devfreq *bus_devfreq; struct msm_adreno_extended_profile *gpu_profile; struct devfreq_dev_profile *profile; struct devfreq_msm_adreno_tz_data *data; int i, out = 0; int ret; device = dev_get_drvdata(dev); if (device == NULL) return -ENODEV; pwrscale = &device->pwrscale; pwr = &device->pwrctrl; gpu_profile = &pwrscale->gpu_profile; profile = &pwrscale->gpu_profile.profile; srcu_init_notifier_head(&pwrscale->nh); profile->initial_freq = pwr->pwrlevels[pwr->default_pwrlevel].gpu_freq; /* Let's start with 10 ms and tune in later */ profile->polling_ms = 10; /* do not include the 'off' level or duplicate freq. levels */ for (i = 0; i < (pwr->num_pwrlevels - 1); i++) pwrscale->freq_table[out++] = pwr->pwrlevels[i].gpu_freq; profile->max_state = out; /* link storage array to the devfreq profile pointer */ profile->freq_table = pwrscale->freq_table; /* if there is only 1 freq, no point in running a governor */ if (profile->max_state == 1) governor = "performance"; /* initialize msm-adreno-tz governor specific data here */ data = gpu_profile->private_data; /* * If there is a separate GX power rail, allow * independent modification to its voltage through * the bus bandwidth vote. */ if (pwr->bus_control) { out = 0; while (pwr->bus_ib[out]) { pwr->bus_ib[out] = pwr->bus_ib[out] >> 20; out++; } data->bus.num = out; data->bus.ib = &pwr->bus_ib[0]; data->bus.index = &pwr->bus_index[0]; } else
int kgsl_pwrscale_init(struct device *dev, const char *governor) { struct kgsl_device *device; struct kgsl_pwrscale *pwrscale; struct kgsl_pwrctrl *pwr; struct devfreq *devfreq; struct devfreq_dev_profile *profile; struct devfreq_msm_adreno_tz_data *data; int i, out = 0; int ret; device = dev_get_drvdata(dev); if (device == NULL) return -ENODEV; pwrscale = &device->pwrscale; pwr = &device->pwrctrl; profile = &pwrscale->profile; srcu_init_notifier_head(&pwrscale->nh); profile->initial_freq = pwr->pwrlevels[pwr->default_pwrlevel].gpu_freq; profile->polling_ms = 10; for (i = 0; i < (pwr->num_pwrlevels - 1); i++) pwrscale->freq_table[out++] = pwr->pwrlevels[i].gpu_freq; profile->max_state = out; profile->freq_table = pwrscale->freq_table; if (profile->max_state == 1) governor = "performance"; for (i = 0; i < profile->num_governor_data; i++) { if (strncmp("msm-adreno-tz", profile->governor_data[i].name, DEVFREQ_NAME_LEN) == 0) { data = (struct devfreq_msm_adreno_tz_data *) profile->governor_data[i].data; if (pwr->bus_control) { out = 0; while (pwr->bus_ib[out]) { pwr->bus_ib[out] = pwr->bus_ib[out] >> 20; out++; } data->bus.num = out; data->bus.ib = &pwr->bus_ib[0]; data->bus.index = &pwr->bus_index[0]; printk("kgsl: num bus is %d\n", out); } else {
int __init ambarella_init_audio(void) { int retval = 0; srcu_init_notifier_head(&audio_notifier_list); memset(&audio_i2s_intf, 0, sizeof(struct ambarella_i2s_interface)); audio_i2s_intf.state = AUDIO_NOTIFY_UNKNOWN; audio_notify.notifier_call = audio_notify_transition; retval = ambarella_audio_register_notifier(&audio_notify); return retval; }
/* * kgsl_pwrscale_init - Initialize pwrscale. * @dev: The device * @governor: The initial governor to use. * * Initialize devfreq and any non-constant profile data. */ int kgsl_pwrscale_init(struct device *dev, const char *governor) { struct kgsl_device *device; struct kgsl_pwrscale *pwrscale; struct kgsl_pwrctrl *pwr; struct devfreq *devfreq; struct devfreq_dev_profile *profile; struct devfreq_msm_adreno_tz_data *data; int i, out = 0; int ret; device = dev_get_drvdata(dev); if (device == NULL) return -ENODEV; pwrscale = &device->pwrscale; pwr = &device->pwrctrl; profile = &pwrscale->profile; srcu_init_notifier_head(&pwrscale->nh); profile->initial_freq = pwr->pwrlevels[pwr->default_pwrlevel].gpu_freq; /* Let's start with 10 ms and tune in later */ profile->polling_ms = 10; /* do not include the 'off' level or duplicate freq. levels */ for (i = 0; i < (pwr->num_pwrlevels - 1); i++) pwrscale->freq_table[out++] = pwr->pwrlevels[i].gpu_freq; /* * Max_state is the number of valid power levels. * The valid power levels range from 0 - (max_state - 1) */ profile->max_state = pwr->num_pwrlevels - 1; /* link storage array to the devfreq profile pointer */ profile->freq_table = pwrscale->freq_table; /* if there is only 1 freq, no point in running a governor */ if (profile->max_state == 1) governor = "performance"; /* initialize any governor specific data here */ for (i = 0; i < profile->num_governor_data; i++) { if (strncmp("msm-adreno-tz", profile->governor_data[i].name, DEVFREQ_NAME_LEN) == 0) { data = (struct devfreq_msm_adreno_tz_data *) profile->governor_data[i].data; /* * If there is a separate GX power rail, allow * independent modification to its voltage through * the bus bandwidth vote. */ if (pwr->bus_control) { out = 0; while (pwr->bus_ib[out]) { pwr->bus_ib[out] = pwr->bus_ib[out] >> 20; out++; } data->bus.num = out; data->bus.ib = &pwr->bus_ib[0]; data->bus.index = &pwr->bus_index[0]; printk("kgsl: num bus is %d\n", out); } else {