linux/drivers/cpuidle/cpuidle-clps711x.c
<<
>>
Prefs
   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);
  53