mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 16:10:58 +00:00
gpio: dm: Support manual relocation for gpio
Relocate gpio ops as was done by:
"dm: Add support for all targets which requires MANUAL_RELOC"
(sha1: 484fdf5ba0
)
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
758de97bb8
commit
1b4c2aa25b
1 changed files with 35 additions and 0 deletions
|
@ -854,11 +854,46 @@ static int gpio_pre_remove(struct udevice *dev)
|
|||
return gpio_renumber(dev);
|
||||
}
|
||||
|
||||
static int gpio_post_bind(struct udevice *dev)
|
||||
{
|
||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
||||
struct dm_gpio_ops *ops = (struct dm_gpio_ops *)device_get_ops(dev);
|
||||
static int reloc_done;
|
||||
|
||||
if (!reloc_done) {
|
||||
if (ops->request)
|
||||
ops->request += gd->reloc_off;
|
||||
if (ops->free)
|
||||
ops->free += gd->reloc_off;
|
||||
if (ops->direction_input)
|
||||
ops->direction_input += gd->reloc_off;
|
||||
if (ops->direction_output)
|
||||
ops->direction_output += gd->reloc_off;
|
||||
if (ops->get_value)
|
||||
ops->get_value += gd->reloc_off;
|
||||
if (ops->set_value)
|
||||
ops->set_value += gd->reloc_off;
|
||||
if (ops->get_open_drain)
|
||||
ops->get_open_drain += gd->reloc_off;
|
||||
if (ops->set_open_drain)
|
||||
ops->set_open_drain += gd->reloc_off;
|
||||
if (ops->get_function)
|
||||
ops->get_function += gd->reloc_off;
|
||||
if (ops->xlate)
|
||||
ops->xlate += gd->reloc_off;
|
||||
|
||||
reloc_done++;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(gpio) = {
|
||||
.id = UCLASS_GPIO,
|
||||
.name = "gpio",
|
||||
.flags = DM_UC_FLAG_SEQ_ALIAS,
|
||||
.post_probe = gpio_post_probe,
|
||||
.post_bind = gpio_post_bind,
|
||||
.pre_remove = gpio_pre_remove,
|
||||
.per_device_auto_alloc_size = sizeof(struct gpio_dev_priv),
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue