139f7611fSSimon Glass /* 239f7611fSSimon Glass * Copyright (c) 2013 Google, Inc 339f7611fSSimon Glass * 439f7611fSSimon Glass * (C) Copyright 2012 539f7611fSSimon Glass * Pavel Herrmann <morpheus.ibis@gmail.com> 639f7611fSSimon Glass * 739f7611fSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 839f7611fSSimon Glass */ 939f7611fSSimon Glass 1039f7611fSSimon Glass #include <common.h> 1139f7611fSSimon Glass #include <dm.h> 1239f7611fSSimon Glass #include <dm-demo.h> 1339f7611fSSimon Glass #include <errno.h> 1439f7611fSSimon Glass #include <fdtdec.h> 1539f7611fSSimon Glass #include <malloc.h> 1639f7611fSSimon Glass #include <asm/io.h> 1739f7611fSSimon Glass #include <linux/list.h> 1839f7611fSSimon Glass 1939f7611fSSimon Glass DECLARE_GLOBAL_DATA_PTR; 2039f7611fSSimon Glass 2139f7611fSSimon Glass UCLASS_DRIVER(demo) = { 22*74f96dadSSimon Glass .name = "demo", 2339f7611fSSimon Glass .id = UCLASS_DEMO, 2439f7611fSSimon Glass }; 2539f7611fSSimon Glass 2654c5d08aSHeiko Schocher int demo_hello(struct udevice *dev, int ch) 2739f7611fSSimon Glass { 2839f7611fSSimon Glass const struct demo_ops *ops = device_get_ops(dev); 2939f7611fSSimon Glass 3039f7611fSSimon Glass if (!ops->hello) 3139f7611fSSimon Glass return -ENOSYS; 3239f7611fSSimon Glass 3339f7611fSSimon Glass return ops->hello(dev, ch); 3439f7611fSSimon Glass } 3539f7611fSSimon Glass 3654c5d08aSHeiko Schocher int demo_status(struct udevice *dev, int *status) 3739f7611fSSimon Glass { 3839f7611fSSimon Glass const struct demo_ops *ops = device_get_ops(dev); 3939f7611fSSimon Glass 4039f7611fSSimon Glass if (!ops->status) 4139f7611fSSimon Glass return -ENOSYS; 4239f7611fSSimon Glass 4339f7611fSSimon Glass return ops->status(dev, status); 4439f7611fSSimon Glass } 4539f7611fSSimon Glass 4654c5d08aSHeiko Schocher int demo_parse_dt(struct udevice *dev) 4739f7611fSSimon Glass { 4839f7611fSSimon Glass struct dm_demo_pdata *pdata = dev_get_platdata(dev); 4939f7611fSSimon Glass int dn = dev->of_offset; 5039f7611fSSimon Glass 5139f7611fSSimon Glass pdata->sides = fdtdec_get_int(gd->fdt_blob, dn, "sides", 0); 5239f7611fSSimon Glass pdata->colour = fdt_getprop(gd->fdt_blob, dn, "colour", NULL); 5339f7611fSSimon Glass if (!pdata->sides || !pdata->colour) { 5439f7611fSSimon Glass debug("%s: Invalid device tree data\n", __func__); 5539f7611fSSimon Glass return -EINVAL; 5639f7611fSSimon Glass } 5739f7611fSSimon Glass 5839f7611fSSimon Glass return 0; 5939f7611fSSimon Glass } 60