~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/platforms/powernv/opal-sensor.c

Version: ~ [ linux-5.3-rc4 ] ~ [ linux-5.2.8 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.66 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.138 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.189 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.189 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.71 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * PowerNV sensor code
  3  *
  4  * Copyright (C) 2013 IBM
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License as published by
  8  * the Free Software Foundation; either version 2 of the License, or
  9  * (at your option) any later version.
 10  *
 11  * This program is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  * GNU General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU General Public License
 17  * along with this program; if not, write to the Free Software
 18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 19  */
 20 
 21 #include <linux/delay.h>
 22 #include <linux/mutex.h>
 23 #include <linux/of_platform.h>
 24 #include <asm/opal.h>
 25 #include <asm/machdep.h>
 26 
 27 static DEFINE_MUTEX(opal_sensor_mutex);
 28 
 29 /*
 30  * This will return sensor information to driver based on the requested sensor
 31  * handle. A handle is an opaque id for the powernv, read by the driver from the
 32  * device tree..
 33  */
 34 int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data)
 35 {
 36         int ret, token;
 37         struct opal_msg msg;
 38         __be32 data;
 39 
 40         token = opal_async_get_token_interruptible();
 41         if (token < 0) {
 42                 pr_err("%s: Couldn't get the token, returning\n", __func__);
 43                 ret = token;
 44                 goto out;
 45         }
 46 
 47         mutex_lock(&opal_sensor_mutex);
 48         ret = opal_sensor_read(sensor_hndl, token, &data);
 49         switch (ret) {
 50         case OPAL_ASYNC_COMPLETION:
 51                 ret = opal_async_wait_response(token, &msg);
 52                 if (ret) {
 53                         pr_err("%s: Failed to wait for the async response, %d\n",
 54                                __func__, ret);
 55                         goto out_token;
 56                 }
 57 
 58                 ret = opal_error_code(opal_get_async_rc(msg));
 59                 *sensor_data = be32_to_cpu(data);
 60                 break;
 61 
 62         case OPAL_SUCCESS:
 63                 ret = 0;
 64                 *sensor_data = be32_to_cpu(data);
 65                 break;
 66 
 67         default:
 68                 ret = opal_error_code(ret);
 69                 break;
 70         }
 71 
 72 out_token:
 73         mutex_unlock(&opal_sensor_mutex);
 74         opal_async_release_token(token);
 75 out:
 76         return ret;
 77 }
 78 EXPORT_SYMBOL_GPL(opal_get_sensor_data);
 79 
 80 int __init opal_sensor_init(void)
 81 {
 82         struct platform_device *pdev;
 83         struct device_node *sensor;
 84 
 85         sensor = of_find_node_by_path("/ibm,opal/sensors");
 86         if (!sensor) {
 87                 pr_err("Opal node 'sensors' not found\n");
 88                 return -ENODEV;
 89         }
 90 
 91         pdev = of_platform_device_create(sensor, "opal-sensor", NULL);
 92         of_node_put(sensor);
 93 
 94         return PTR_ERR_OR_ZERO(pdev);
 95 }
 96 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp