static int power_rpi4_init(void **data)
{
hal_backend_power_funcs *power_funcs = NULL;
- struct pass_resource_cpu *cpu = NULL;
- struct pass_resource_memory *memory = NULL;
- int ret;
- /* Allocate memory */
- power_funcs = calloc(1, sizeof(hal_backend_power_funcs));
+ if (!data) {
+ _E("Invalid parameter");
+ return -EINVAL;
+ }
+
+ power_funcs = *(hal_backend_power_funcs **)data;
if (!power_funcs)
- return -ENOMEM;
+ return -EINVAL;
- cpu = calloc(1, sizeof(struct pass_resource_cpu));
- if (!cpu) {
- ret = -ENOMEM;
- goto err_funcs;
+ if (power_funcs->cpu) {
+ power_funcs->cpu->dvfs = cpu_dvfs_ops;
+ power_funcs->cpu->tmu = cpu_tmu_ops;
}
- memory = calloc(1, sizeof(struct pass_resource_memory));
- if (!memory) {
- ret = -ENOMEM;
- goto err_cpu;
+ if (power_funcs->memory) {
+ power_funcs->memory->get_fault_around_bytes
+ = memory_get_fault_around_bytes;
+ power_funcs->memory->set_fault_around_bytes
+ = memory_set_fault_around_bytes;
}
- /* Initialize each h/w resource */
- cpu->dvfs = cpu_dvfs_ops;
- cpu->tmu = cpu_tmu_ops;
-
- memory->get_fault_around_bytes = memory_get_fault_around_bytes;
- memory->set_fault_around_bytes = memory_set_fault_around_bytes;
-
- /* Initialize hal_backend_power_funcs */
- power_funcs->cpu = cpu;
- power_funcs->memory = memory;
-
- *data = (void *)power_funcs;
-
return 0;
-err_cpu:
- if (cpu)
- free(cpu);
-err_funcs:
- free(power_funcs);
-
- return ret;
}
static int power_rpi4_exit(void *data)
{
- hal_backend_power_funcs *funcs;
-
- if (!data)
- return -EINVAL;
-
- funcs = (hal_backend_power_funcs *)data;
-
- if (funcs->cpu)
- free(funcs->cpu);
- if (funcs->memory)
- free(funcs->memory);
-
- free(funcs);
-
return 0;
}