summaryrefslogtreecommitdiff
path: root/common/cros_ec.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-10-13 23:42:14 -0600
committerSimon Glass <sjg@chromium.org>2014-10-22 10:36:53 -0600
commit84d6cbd3029e8b16e201f1129c300fae258c0f9c (patch)
tree173dac18c98c963f0c0993f33e1035284d0b20bf /common/cros_ec.c
parentfda6fac39bb915fdb0ff31b998336d3a5f5c71a9 (diff)
downloadu-boot-imx-84d6cbd3029e8b16e201f1129c300fae258c0f9c.zip
u-boot-imx-84d6cbd3029e8b16e201f1129c300fae258c0f9c.tar.gz
u-boot-imx-84d6cbd3029e8b16e201f1129c300fae258c0f9c.tar.bz2
dm: cros_ec: Add support for driver model
Add support for driver model if enabled. This involves minimal changes to the code, mostly just plumbing around the edges. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
Diffstat (limited to 'common/cros_ec.c')
-rw-r--r--common/cros_ec.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/common/cros_ec.c b/common/cros_ec.c
index b8ce1b5..bb299bc 100644
--- a/common/cros_ec.c
+++ b/common/cros_ec.c
@@ -10,25 +10,44 @@
#include <common.h>
#include <cros_ec.h>
+#include <dm.h>
+#include <errno.h>
+
DECLARE_GLOBAL_DATA_PTR;
+#ifndef CONFIG_DM_CROS_EC
struct local_info {
struct cros_ec_dev *cros_ec_dev; /* Pointer to cros_ec device */
int cros_ec_err; /* Error for cros_ec, 0 if ok */
};
static struct local_info local;
+#endif
struct cros_ec_dev *board_get_cros_ec_dev(void)
{
+#ifdef CONFIG_DM_CROS_EC
+ struct udevice *dev;
+ int ret;
+
+ ret = uclass_get_device(UCLASS_CROS_EC, 0, &dev);
+ if (ret) {
+ debug("%s: Error %d\n", __func__, ret);
+ return NULL;
+ }
+ return dev->uclass_priv;
+#else
return local.cros_ec_dev;
+#endif
}
static int board_init_cros_ec_devices(const void *blob)
{
+#ifndef CONFIG_DM_CROS_EC
local.cros_ec_err = cros_ec_init(blob, &local.cros_ec_dev);
if (local.cros_ec_err)
return -1; /* Will report in board_late_init() */
+#endif
return 0;
}
@@ -40,5 +59,16 @@ int cros_ec_board_init(void)
int cros_ec_get_error(void)
{
+#ifdef CONFIG_DM_CROS_EC
+ struct udevice *dev;
+ int ret;
+
+ ret = uclass_get_device(UCLASS_CROS_EC, 0, &dev);
+ if (ret && ret != -ENODEV)
+ return ret;
+
+ return 0;
+#else
return local.cros_ec_err;
+#endif
}