pch: Add ioctl support

At present the PCH has 4 operations and these are reasonably widely used
in the drivers. But sometimes we want to add rarely used operations, and
each of these currently adds to the size of the PCH operations table.

Add an ioctl() method which can be easily expanded without any more impact
on the operations table.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass
2019-02-16 20:24:51 -07:00
committed by Bin Meng
parent b45c833c71
commit 1260f8c0ef
4 changed files with 93 additions and 1 deletions

View File

@@ -51,6 +51,16 @@ int pch_get_io_base(struct udevice *dev, u32 *iobasep)
return ops->get_io_base(dev, iobasep);
}
int pch_ioctl(struct udevice *dev, ulong req, void *data, int size)
{
struct pch_ops *ops = pch_get_ops(dev);
if (!ops->ioctl)
return -ENOSYS;
return ops->ioctl(dev, req, data, size);
}
UCLASS_DRIVER(pch) = {
.id = UCLASS_PCH,
.name = "pch",

View File

@@ -48,11 +48,28 @@ static int sandbox_pch_get_io_base(struct udevice *dev, u32 *iobasep)
return 0;
}
int sandbox_pch_ioctl(struct udevice *dev, enum pch_req_t req, void *data,
int size)
{
switch (req) {
case PCH_REQ_TEST1:
return -ENOSYS;
case PCH_REQ_TEST2:
return *(char *)data;
case PCH_REQ_TEST3:
*(char *)data = 'x';
return 1;
default:
return -ENOSYS;
}
}
static const struct pch_ops sandbox_pch_ops = {
.get_spi_base = sandbox_pch_get_spi_base,
.set_spi_protect = sandbox_pch_set_spi_protect,
.get_gpio_base = sandbox_pch_get_gpio_base,
.get_io_base = sandbox_pch_get_io_base,
.ioctl = sandbox_pch_ioctl,
};
static const struct udevice_id sandbox_pch_ids[] = {