static int sunxi_cpu_budget_cooling_register(struct platform_device *pdev) { struct thermal_cooling_device *cdev; struct cpumask cluster0_mask; struct cpumask cluster1_mask; int i; /* make sure cpufreq driver has been initialized */ if (!cpufreq_frequency_get_table(0)) return -EPROBE_DEFER; cpumask_clear(&cluster0_mask); cpumask_clear(&cluster1_mask); #if defined(CONFIG_SCHED_HMP) arch_get_fast_and_slow_cpus(&cluster1_mask,&cluster0_mask); #elif defined(CONFIG_SCHED_SMP_DCMP) if (strlen(CONFIG_CLUSTER0_CPU_MASK) && strlen(CONFIG_CLUSTER1_CPU_MASK)) { if (cpulist_parse(CONFIG_CLUSTER0_CPU_MASK, &cluster0_mask)) { pr_err("Failed to parse cluster0 cpu mask!\n"); return -1; } if (cpulist_parse(CONFIG_CLUSTER1_CPU_MASK, &cluster1_mask)) { pr_err("Failed to parse cluster1 cpu mask!\n"); return -1; } } #else cpumask_copy(&cluster0_mask, cpu_possible_mask); #endif dynamic_tbl = kmalloc(sizeof(struct cpu_budget_table)*max_tbl_num,GFP_KERNEL); dynamic_tbl_num=0; for(i=0;i<max_tbl_num;i++) { if (m_current_tbl[i].online) { dynamic_tbl[dynamic_tbl_num].cluster0_freq = m_current_tbl[i].cluster0_freq; dynamic_tbl[dynamic_tbl_num].cluster0_cpunr = m_current_tbl[i].cluster0_cpunr; dynamic_tbl[dynamic_tbl_num].cluster1_freq = m_current_tbl[i].cluster1_freq; dynamic_tbl[dynamic_tbl_num].cluster1_cpunr = m_current_tbl[i].cluster1_cpunr; dynamic_tbl[dynamic_tbl_num].gpu_throttle = m_current_tbl[i].gpu_throttle; dynamic_tbl_num++; } } cdev = cpu_budget_cooling_register(dynamic_tbl,dynamic_tbl_num,&cluster0_mask,&cluster1_mask); if (IS_ERR_OR_NULL(cdev)) { dev_err(&pdev->dev, "Failed to register cooling device\n"); return PTR_ERR(cdev); } platform_set_drvdata(pdev, cdev); dev_info(&pdev->dev, "Cooling device registered: %s\n", cdev->type); return 0; }
static int sunxi_cpu_budget_cooling_register(struct platform_device *pdev) { struct thermal_cooling_device *cdev; struct cpumask cluster0_mask; struct cpumask cluster1_mask; int i; /* make sure cpufreq driver has been initialized */ if (!cpufreq_frequency_get_table(0)) return -EPROBE_DEFER; cpumask_clear(&cluster0_mask); cpumask_clear(&cluster1_mask); cpumask_set_cpu(0, &cluster0_mask); cpumask_set_cpu(1, &cluster0_mask); cpumask_set_cpu(2, &cluster0_mask); cpumask_set_cpu(3, &cluster0_mask); cpumask_set_cpu(4, &cluster1_mask); cpumask_set_cpu(5, &cluster1_mask); cpumask_set_cpu(6, &cluster1_mask); cpumask_set_cpu(7, &cluster1_mask); dynamic_tbl = kmalloc(sizeof(struct cpu_budget_table)*max_tbl_num,GFP_KERNEL); dynamic_tbl_num=0; for(i=0;i<max_tbl_num;i++) { if (m_current_tbl[i].online) { dynamic_tbl[dynamic_tbl_num].cluster0_freq = m_current_tbl[i].cluster0_freq; dynamic_tbl[dynamic_tbl_num].cluster0_cpunr = m_current_tbl[i].cluster0_cpunr; dynamic_tbl[dynamic_tbl_num].cluster1_freq = m_current_tbl[i].cluster1_freq; dynamic_tbl[dynamic_tbl_num].cluster1_cpunr = m_current_tbl[i].cluster1_cpunr; dynamic_tbl[dynamic_tbl_num].gpu_throttle = m_current_tbl[i].gpu_throttle; dynamic_tbl_num++; } } cdev = cpu_budget_cooling_register(dynamic_tbl,dynamic_tbl_num,&cluster0_mask,&cluster1_mask); if (IS_ERR_OR_NULL(cdev)) { dev_err(&pdev->dev, "Failed to register cooling device\n"); return PTR_ERR(cdev); } platform_set_drvdata(pdev, cdev); dev_info(&pdev->dev, "Cooling device registered: %s\n", cdev->type); return 0; }