cpuidle-clps711x.c (1218B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * CLPS711X CPU idle driver 4 * 5 * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> 6 */ 7 8#include <linux/cpuidle.h> 9#include <linux/err.h> 10#include <linux/io.h> 11#include <linux/init.h> 12#include <linux/platform_device.h> 13 14#define CLPS711X_CPUIDLE_NAME "clps711x-cpuidle" 15 16static void __iomem *clps711x_halt; 17 18static int clps711x_cpuidle_halt(struct cpuidle_device *dev, 19 struct cpuidle_driver *drv, int index) 20{ 21 writel(0xaa, clps711x_halt); 22 23 return index; 24} 25 26static struct cpuidle_driver clps711x_idle_driver = { 27 .name = CLPS711X_CPUIDLE_NAME, 28 .owner = THIS_MODULE, 29 .states[0] = { 30 .name = "HALT", 31 .desc = "CLPS711X HALT", 32 .enter = clps711x_cpuidle_halt, 33 .exit_latency = 1, 34 }, 35 .state_count = 1, 36}; 37 38static int __init clps711x_cpuidle_probe(struct platform_device *pdev) 39{ 40 clps711x_halt = devm_platform_ioremap_resource(pdev, 0); 41 if (IS_ERR(clps711x_halt)) 42 return PTR_ERR(clps711x_halt); 43 44 return cpuidle_register(&clps711x_idle_driver, NULL); 45} 46 47static struct platform_driver clps711x_cpuidle_driver = { 48 .driver = { 49 .name = CLPS711X_CPUIDLE_NAME, 50 }, 51}; 52builtin_platform_driver_probe(clps711x_cpuidle_driver, clps711x_cpuidle_probe);