/* linux/arch/arm/mach-exynos/board-smdk5250-power.c * * Copyright (c) 2012 Samsung Electronics Co., Ltd. * http://www.samsung.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef CONFIG_REGULATOR_S5M8767 #include #include #endif #if defined(CONFIG_EXYNOS_SETUP_THERMAL) #include #endif #include "board-smdk5250.h" #define REG_INFORM4 (S5P_INFORM4) /* max8997 */ static struct regulator_consumer_supply max8997_buck1 = REGULATOR_SUPPLY("vdd_arm", NULL); static struct regulator_consumer_supply max8997_buck2 = REGULATOR_SUPPLY("vdd_int", NULL); static struct regulator_consumer_supply max8997_buck3 = REGULATOR_SUPPLY("vdd_g3d", NULL); static struct regulator_consumer_supply max8997_buck4 = REGULATOR_SUPPLY("vdd_mif", NULL); static struct regulator_consumer_supply __initdata ldo2_consumer = REGULATOR_SUPPLY("vdd_ldo2", NULL); static struct regulator_consumer_supply __initdata ldo3_consumer = REGULATOR_SUPPLY("vdd_ldo3", NULL); static struct regulator_consumer_supply __initdata ldo4_consumer = REGULATOR_SUPPLY("vdd_ldo4", NULL); static struct regulator_consumer_supply __initdata ldo5_consumer = REGULATOR_SUPPLY("vdd_ldo5", NULL); static struct regulator_consumer_supply __initdata ldo6_consumer = REGULATOR_SUPPLY("vdd_ldo6", NULL); static struct regulator_consumer_supply __initdata ldo7_consumer = REGULATOR_SUPPLY("vdd_ldo7", NULL); static struct regulator_consumer_supply __initdata ldo8_consumer = REGULATOR_SUPPLY("vdd_ldo8", NULL); static struct regulator_consumer_supply __initdata ldo9_consumer = REGULATOR_SUPPLY("vdd_ldo9", NULL); static struct regulator_consumer_supply __initdata ldo10_consumer = REGULATOR_SUPPLY("vdd_ldo10", NULL); static struct regulator_consumer_supply __initdata ldo11_consumer = REGULATOR_SUPPLY("vdd_ldo11", NULL); static struct regulator_consumer_supply __initdata ldo14_consumer = REGULATOR_SUPPLY("vdd_ldo14", NULL); static struct regulator_consumer_supply __initdata ldo21_consumer = REGULATOR_SUPPLY("vdd_ldo21", NULL); static struct regulator_init_data __initdata __maybe_unused max8997_ldo2_data = { .constraints = { .name = "vdd_ldo2 range", .min_uV = 1000000, .max_uV = 1000000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo2_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo3_data = { .constraints = { .name = "vdd_ldo3 range", .min_uV = 1000000, .max_uV = 1000000, .apply_uV = 1, .always_on = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo3_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo4_data = { .constraints = { .name = "vdd_ldo4 range", .min_uV = 1800000, .max_uV = 1800000, .apply_uV = 1, .always_on = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo4_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo5_data = { .constraints = { .name = "vdd_ldo5 range", .min_uV = 1000000, .max_uV = 1000000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo5_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo6_data = { .constraints = { .name = "vdd_ldo6 range", .min_uV = 1800000, .max_uV = 1800000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo6_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo7_data = { .constraints = { .name = "vdd_ldo7 range", .min_uV = 1800000, .max_uV = 1800000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo7_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo8_data = { .constraints = { .name = "vdd_ldo8 range", .min_uV = 3300000, .max_uV = 3300000, .apply_uV = 1, .always_on = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo8_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo9_data = { .constraints = { .name = "vdd_ldo9 range", .min_uV = 2800000, .max_uV = 2800000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo9_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo10_data = { .constraints = { .name = "vdd_ldo10 range", .min_uV = 1000000, .max_uV = 1000000, .apply_uV = 1, .always_on = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo10_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo11_data = { .constraints = { .name = "vdd_ldo11 range", .min_uV = 2800000, .max_uV = 2800000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo11_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo14_data = { .constraints = { .name = "vdd_ldo14 range", .min_uV = 1800000, .max_uV = 1800000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo14_consumer, }; static struct regulator_init_data __initdata __maybe_unused max8997_ldo21_data = { .constraints = { .name = "vdd_ldo21 range", .min_uV = 1200000, .max_uV = 1200000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &ldo21_consumer, }; static struct regulator_init_data __initdata max8997_buck1_data = { .constraints = { .name = "vdd_arm range", .min_uV = 800000, .max_uV = 1500000, .always_on = 1, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max8997_buck1, }; static struct regulator_init_data __initdata max8997_buck2_data = { .constraints = { .name = "vdd_int range", .min_uV = 950000, .max_uV = 1150000, .always_on = 1, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max8997_buck2, }; static struct regulator_init_data __initdata max8997_buck3_data = { .constraints = { .name = "vdd_g3d range", .min_uV = 850000, .max_uV = 1200000, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max8997_buck3, }; static struct regulator_init_data __initdata max8997_buck4_data = { .constraints = { .name = "vdd_mif range", .min_uV = 950000, .max_uV = 1200000, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max8997_buck4, }; static struct max8997_regulator_data __initdata max8997_regulators[] = { { MAX8997_LDO14, &max8997_ldo14_data, }, { MAX8997_BUCK1, &max8997_buck1_data, }, { MAX8997_BUCK2, &max8997_buck2_data, }, { MAX8997_BUCK3, &max8997_buck3_data, }, { MAX8997_BUCK4, &max8997_buck4_data, }, }; static struct max8997_platform_data __initdata smdk5250_max8997_info = { .num_regulators = ARRAY_SIZE(max8997_regulators), .regulators = max8997_regulators, .buck1_voltage[0] = 1250000, /* 1.25V */ .buck1_voltage[1] = 1100000, /* 1.1V */ .buck1_voltage[2] = 1100000, /* 1.1V */ .buck1_voltage[3] = 1100000, /* 1.1V */ .buck1_voltage[4] = 1100000, /* 1.1V */ .buck1_voltage[5] = 1100000, /* 1.1V */ .buck1_voltage[6] = 1000000, /* 1.0V */ .buck1_voltage[7] = 950000, /* 0.95V */ .buck2_voltage[0] = 1150000, /* 1.15V */ .buck2_voltage[1] = 1000000, /* 1.0V */ .buck2_voltage[2] = 950000, /* 0.95V */ .buck2_voltage[3] = 900000, /* 0.9V */ .buck2_voltage[4] = 1000000, /* 1.0V */ .buck2_voltage[5] = 1000000, /* 1.0V */ .buck2_voltage[6] = 950000, /* 0.95V */ .buck2_voltage[7] = 900000, /* 0.9V */ .buck5_voltage[0] = 1100000, /* 1.2V */ .buck5_voltage[1] = 1100000, /* 1.1V */ .buck5_voltage[2] = 1100000, /* 1.1V */ .buck5_voltage[3] = 1100000, /* 1.1V */ .buck5_voltage[4] = 1100000, /* 1.1V */ .buck5_voltage[5] = 1100000, /* 1.1V */ .buck5_voltage[6] = 1100000, /* 1.1V */ .buck5_voltage[7] = 1100000, /* 1.1V */ }; /* max77686 */ static struct regulator_consumer_supply max77686_buck1 = REGULATOR_SUPPLY("vdd_mif", NULL); static struct regulator_consumer_supply max77686_buck2 = REGULATOR_SUPPLY("vdd_arm", NULL); static struct regulator_consumer_supply max77686_buck3 = REGULATOR_SUPPLY("vdd_int", NULL); static struct regulator_consumer_supply max77686_buck4 = REGULATOR_SUPPLY("vdd_g3d", NULL); static struct regulator_consumer_supply max77686_ldo11_consumer = REGULATOR_SUPPLY("vdd_ldo11", NULL); static struct regulator_consumer_supply max77686_ldo14_consumer = REGULATOR_SUPPLY("vdd_ldo14", NULL); static struct regulator_init_data max77686_buck1_data = { .constraints = { .name = "vdd_mif range", .min_uV = 950000, .max_uV = 1300000, .always_on = 1, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_buck1, }; static struct regulator_init_data max77686_buck2_data = { .constraints = { .name = "vdd_arm range", .min_uV = 800000, .max_uV = 1350000, .always_on = 1, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_buck2, }; static struct regulator_init_data max77686_buck3_data = { .constraints = { .name = "vdd_int range", .min_uV = 900000, .max_uV = 1200000, .always_on = 1, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_buck3, }; static struct regulator_init_data max77686_buck4_data = { .constraints = { .name = "vdd_g3d range", .min_uV = 700000, .max_uV = 1300000, .boot_on = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_buck4, }; static struct regulator_init_data max77686_ldo11_data = { .constraints = { .name = "vdd_ldo11 range", .min_uV = 1900000, .max_uV = 1900000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_ldo11_consumer, }; static struct regulator_init_data max77686_ldo14_data = { .constraints = { .name = "vdd_ldo14 range", .min_uV = 1900000, .max_uV = 1900000, .apply_uV = 1, .always_on = 1, .state_mem = { .enabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &max77686_ldo14_consumer, }; static struct max77686_regulator_data max77686_regulators[] = { {MAX77686_BUCK1, &max77686_buck1_data,}, {MAX77686_BUCK2, &max77686_buck2_data,}, {MAX77686_BUCK3, &max77686_buck3_data,}, {MAX77686_BUCK4, &max77686_buck4_data,}, {MAX77686_LDO11, &max77686_ldo11_data,}, {MAX77686_LDO14, &max77686_ldo14_data,}, }; struct max77686_opmode_data max77686_opmode_data[MAX77686_REG_MAX] = { [MAX77686_LDO11] = {MAX77686_LDO11, MAX77686_OPMODE_STANDBY}, [MAX77686_LDO14] = {MAX77686_LDO14, MAX77686_OPMODE_STANDBY}, [MAX77686_BUCK1] = {MAX77686_BUCK1, MAX77686_OPMODE_STANDBY}, [MAX77686_BUCK2] = {MAX77686_BUCK2, MAX77686_OPMODE_STANDBY}, [MAX77686_BUCK3] = {MAX77686_BUCK3, MAX77686_OPMODE_STANDBY}, [MAX77686_BUCK4] = {MAX77686_BUCK4, MAX77686_OPMODE_STANDBY}, }; static struct max77686_platform_data smdk5250_max77686_info = { .num_regulators = ARRAY_SIZE(max77686_regulators), .regulators = max77686_regulators, .irq_gpio = 0, .irq_base = 0, .wakeup = 0, .opmode_data = max77686_opmode_data, .ramp_rate = MAX77686_RAMP_RATE_27MV, .buck2_voltage[0] = 1300000, /* 1.3V */ .buck2_voltage[1] = 1000000, /* 1.0V */ .buck2_voltage[2] = 950000, /* 0.95V */ .buck2_voltage[3] = 900000, /* 0.9V */ .buck2_voltage[4] = 1000000, /* 1.0V */ .buck2_voltage[5] = 1000000, /* 1.0V */ .buck2_voltage[6] = 950000, /* 0.95V */ .buck2_voltage[7] = 900000, /* 0.9V */ .buck3_voltage[0] = 1037500, /* 1.0375V */ .buck3_voltage[1] = 1000000, /* 1.0V */ .buck3_voltage[2] = 950000, /* 0.95V */ .buck3_voltage[3] = 900000, /* 0.9V */ .buck3_voltage[4] = 1000000, /* 1.0V */ .buck3_voltage[5] = 1000000, /* 1.0V */ .buck3_voltage[6] = 950000, /* 0.95V */ .buck3_voltage[7] = 900000, /* 0.9V */ .buck4_voltage[0] = 1100000, /* 1.1V */ .buck4_voltage[1] = 1000000, /* 1.0V */ .buck4_voltage[2] = 950000, /* 0.95V */ .buck4_voltage[3] = 900000, /* 0.9V */ .buck4_voltage[4] = 1000000, /* 1.0V */ .buck4_voltage[5] = 1000000, /* 1.0V */ .buck4_voltage[6] = 950000, /* 0.95V */ .buck4_voltage[7] = 900000, /* 0.9V */ }; #ifdef CONFIG_REGULATOR_S5M8767 /* S5M8767 Regulator */ static int s5m_cfg_irq(void) { /* AP_PMIC_IRQ: EINT26 */ s3c_gpio_cfgpin(EXYNOS5_GPX3(2), S3C_GPIO_SFN(0xF)); s3c_gpio_setpull(EXYNOS5_GPX3(2), S3C_GPIO_PULL_UP); return 0; } static struct regulator_consumer_supply s5m8767_buck1_consumer = REGULATOR_SUPPLY("vdd_mif", NULL); static struct regulator_consumer_supply s5m8767_buck2_consumer = REGULATOR_SUPPLY("vdd_arm", NULL); static struct regulator_consumer_supply s5m8767_buck3_consumer = REGULATOR_SUPPLY("vdd_int", NULL); static struct regulator_consumer_supply s5m8767_buck4_consumer = REGULATOR_SUPPLY("vdd_g3d", NULL); static struct regulator_init_data s5m8767_buck1_data = { .constraints = { .name = "vdd_mif range", .min_uV = 950000, .max_uV = 1300000, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .always_on = 1, .boot_on = 1, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &s5m8767_buck1_consumer, }; static struct regulator_init_data s5m8767_buck2_data = { .constraints = { .name = "vdd_arm range", .min_uV = 800000, .max_uV = 1350000, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .always_on = 1, .boot_on = 1, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &s5m8767_buck2_consumer, }; static struct regulator_init_data s5m8767_buck3_data = { .constraints = { .name = "vdd_int range", .min_uV = 900000, .max_uV = 1200000, .apply_uV = 1, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, .always_on = 1, .boot_on = 1, }, .num_consumer_supplies = 1, .consumer_supplies = &s5m8767_buck3_consumer, }; static struct regulator_init_data s5m8767_buck4_data = { .constraints = { .name = "vdd_g3d range", .min_uV = 850000, .max_uV = 1300000, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS, .boot_on = 1, .state_mem = { .disabled = 1, }, }, .num_consumer_supplies = 1, .consumer_supplies = &s5m8767_buck4_consumer, }; static struct s5m_regulator_data gaia_regulators[] = { {S5M8767_BUCK1, &s5m8767_buck1_data}, {S5M8767_BUCK2, &s5m8767_buck2_data}, {S5M8767_BUCK3, &s5m8767_buck3_data}, {S5M8767_BUCK4, &s5m8767_buck4_data}, }; struct s5m_opmode_data s5m8767_opmode_data[S5M8767_REG_MAX] = { [S5M8767_BUCK1] = {S5M8767_BUCK1, S5M_OPMODE_STANDBY}, [S5M8767_BUCK2] = {S5M8767_BUCK2, S5M_OPMODE_STANDBY}, [S5M8767_BUCK3] = {S5M8767_BUCK3, S5M_OPMODE_STANDBY}, [S5M8767_BUCK4] = {S5M8767_BUCK4, S5M_OPMODE_STANDBY}, }; static struct s5m_platform_data smdk5250_s5m8767_pdata = { .device_type = S5M8767X, .irq_base = IRQ_BOARD_START, .num_regulators = ARRAY_SIZE(gaia_regulators), .regulators = gaia_regulators, .cfg_pmic_irq = s5m_cfg_irq, .wakeup = 1, .opmode_data = s5m8767_opmode_data, .wtsr_smpl = 1, .buck2_voltage[0] = 1250000, .buck2_voltage[1] = 1200000, .buck2_voltage[2] = 1150000, .buck2_voltage[3] = 1100000, .buck2_voltage[4] = 1050000, .buck2_voltage[5] = 1000000, .buck2_voltage[6] = 950000, .buck2_voltage[7] = 900000, .buck3_voltage[0] = 1100000, .buck3_voltage[1] = 1000000, .buck3_voltage[2] = 950000, .buck3_voltage[3] = 900000, .buck3_voltage[4] = 1100000, .buck3_voltage[5] = 1000000, .buck3_voltage[6] = 950000, .buck3_voltage[7] = 900000, .buck4_voltage[0] = 1200000, .buck4_voltage[1] = 1150000, .buck4_voltage[2] = 1200000, .buck4_voltage[3] = 1100000, .buck4_voltage[4] = 1100000, .buck4_voltage[5] = 1100000, .buck4_voltage[6] = 1100000, .buck4_voltage[7] = 1100000, .buck_ramp_delay = 25, .buck2_ramp_enable = true, .buck3_ramp_enable = true, .buck4_ramp_enable = true, }; /* End of S5M8767 */ #endif static struct i2c_board_info i2c_devs0[] __initdata = { #ifdef CONFIG_REGULATOR_S5M8767 { I2C_BOARD_INFO("s5m87xx", 0xCC >> 1), .platform_data = &smdk5250_s5m8767_pdata, .irq = IRQ_EINT(26), }, #else { I2C_BOARD_INFO("max8997", 0x66), .platform_data = &smdk5250_max8997_info, }, { I2C_BOARD_INFO("max77686", (0x12 >> 1)), .platform_data = &smdk5250_max77686_info, }, #endif }; #ifdef CONFIG_BATTERY_SAMSUNG static struct platform_device samsung_device_battery = { .name = "samsung-fake-battery", .id = -1, }; #endif #ifdef CONFIG_BUSFREQ_OPP /* BUSFREQ to control memory/bus*/ static struct device_domain busfreq; #endif static struct platform_device exynos5_busfreq = { .id = -1, .name = "exynos-busfreq", }; #ifdef CONFIG_EXYNOS_SETUP_THERMAL /* below temperature base on the celcius degree */ struct tmu_data exynos_tmu_data __initdata = { .ts = { .stop_throttle = 82, .start_throttle = 85, .stop_warning = 95, .start_warning = 103, .start_tripping = 110, /* temp to do tripping */ }, .efuse_value = 55, .slope = 0x10008802, .mode = 0, }; #endif static struct platform_device *smdk5250_power_devices[] __initdata = { /* Samsung Power Domain */ &exynos5_device_pd[PD_MFC], &exynos5_device_pd[PD_G3D], &exynos5_device_pd[PD_ISP], &exynos5_device_pd[PD_GSCL], &exynos5_device_pd[PD_DISP1], &s3c_device_i2c0, #ifdef CONFIG_BATTERY_SAMSUNG &samsung_device_battery, #endif #ifdef CONFIG_EXYNOS_SETUP_THERMAL &exynos_device_tmu, #endif &exynos5_busfreq, }; static int smdk5250_notifier_call(struct notifier_block *this, unsigned long code, void *_cmd) { int mode = 0; if ((code == SYS_RESTART) && _cmd) if (!strcmp((char *)_cmd, "recovery")) mode = 0xf; __raw_writel(mode, REG_INFORM4); return NOTIFY_DONE; } static struct notifier_block smdk5250_reboot_notifier = { .notifier_call = smdk5250_notifier_call, }; void __init exynos5_smdk5250_power_init(void) { s3c_i2c0_set_platdata(NULL); i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); #if defined(CONFIG_EXYNOS_DEV_PD) && defined(CONFIG_PM_RUNTIME) exynos_pd_enable(&exynos5_device_pd[PD_MFC].dev); exynos_pd_enable(&exynos5_device_pd[PD_G3D].dev); exynos_pd_enable(&exynos5_device_pd[PD_ISP].dev); exynos_pd_enable(&exynos5_device_pd[PD_GSCL].dev); exynos_pd_enable(&exynos5_device_pd[PD_DISP1].dev); #elif defined(CONFIG_EXYNOS_DEV_PD) /* * These power domains should be always on * without runtime pm support. */ exynos_pd_enable(&exynos5_device_pd[PD_MFC].dev); exynos_pd_enable(&exynos5_device_pd[PD_G3D].dev); exynos_pd_enable(&exynos5_device_pd[PD_ISP].dev); exynos_pd_enable(&exynos5_device_pd[PD_GSCL].dev); exynos_pd_enable(&exynos5_device_pd[PD_DISP1].dev); #endif #ifdef CONFIG_EXYNOS_SETUP_THERMAL s5p_tmu_set_platdata(&exynos_tmu_data); #endif #ifdef CONFIG_BUSFREQ_OPP dev_add(&busfreq, &exynos5_busfreq.dev); ppmu_init(&exynos_ppmu[PPMU_CPU], &exynos5_busfreq.dev); ppmu_init(&exynos_ppmu[PPMU_DDR_C], &exynos5_busfreq.dev); ppmu_init(&exynos_ppmu[PPMU_DDR_R1], &exynos5_busfreq.dev); ppmu_init(&exynos_ppmu[PPMU_DDR_L], &exynos5_busfreq.dev); ppmu_init(&exynos_ppmu[PPMU_RIGHT0_BUS], &exynos5_busfreq.dev); #endif register_reboot_notifier(&smdk5250_reboot_notifier); platform_add_devices(smdk5250_power_devices, ARRAY_SIZE(smdk5250_power_devices)); }