1.新增虚拟根设备。
This commit is contained in:
18
device/can.c
18
device/can.c
@@ -55,7 +55,7 @@ static ssize_t mr_can_bus_isr(struct mr_dev *dev, int event, void *args)
|
||||
ssize_t ret = ops->read(can_bus, data, sizeof(data));
|
||||
|
||||
/* Search the matching device */
|
||||
for (list = dev->slist.next; list != &dev->slist; list = list->next)
|
||||
for (list = dev->clist.next; list != &dev->clist; list = list->next)
|
||||
{
|
||||
struct mr_can_dev *can_dev = (struct mr_can_dev *)mr_container_of(list, struct mr_dev, list);
|
||||
|
||||
@@ -119,7 +119,7 @@ int mr_can_bus_register(struct mr_can_bus *can_bus, const char *name, struct mr_
|
||||
|
||||
static int can_dev_filter_configure(struct mr_can_dev *can_dev, int id, int ide, int state)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.parent;
|
||||
struct mr_can_bus_ops *ops = (struct mr_can_bus_ops *)can_bus->dev.drv->ops;
|
||||
|
||||
return ops->filter_configure(can_bus, id, ide, state);
|
||||
@@ -127,7 +127,7 @@ static int can_dev_filter_configure(struct mr_can_dev *can_dev, int id, int ide,
|
||||
|
||||
MR_INLINE int can_dev_take_bus(struct mr_can_dev *can_dev)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.parent;
|
||||
struct mr_can_bus_ops *ops = (struct mr_can_bus_ops *)can_bus->dev.drv->ops;
|
||||
|
||||
if ((can_dev != can_bus->owner) && (can_bus->owner != MR_NULL))
|
||||
@@ -153,7 +153,7 @@ MR_INLINE int can_dev_take_bus(struct mr_can_dev *can_dev)
|
||||
|
||||
MR_INLINE int can_dev_release_bus(struct mr_can_dev *can_dev)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.parent;
|
||||
|
||||
if (can_dev != can_bus->owner)
|
||||
{
|
||||
@@ -166,7 +166,7 @@ MR_INLINE int can_dev_release_bus(struct mr_can_dev *can_dev)
|
||||
|
||||
MR_INLINE ssize_t can_dev_read(struct mr_can_dev *can_dev, uint8_t *buf, size_t size)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.parent;
|
||||
struct mr_can_bus_ops *ops = (struct mr_can_bus_ops *)can_bus->dev.drv->ops;
|
||||
ssize_t rd_size = 0;
|
||||
|
||||
@@ -191,7 +191,7 @@ MR_INLINE ssize_t can_dev_read(struct mr_can_dev *can_dev, uint8_t *buf, size_t
|
||||
|
||||
MR_INLINE ssize_t can_dev_write(struct mr_can_dev *can_dev, int id, int ide, int rtr, const uint8_t *buf, size_t size)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)can_dev->dev.parent;
|
||||
struct mr_can_bus_ops *ops = (struct mr_can_bus_ops *)can_bus->dev.drv->ops;
|
||||
|
||||
return ops->write(can_bus, id, ide, rtr, buf, size);
|
||||
@@ -208,7 +208,7 @@ static int mr_can_dev_open(struct mr_dev *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return can_dev_filter_configure(can_dev->dev.link, can_dev->id, can_dev->ide, MR_ENABLE);
|
||||
return can_dev_filter_configure(can_dev->dev.parent, can_dev->id, can_dev->ide, MR_ENABLE);
|
||||
}
|
||||
|
||||
static int mr_can_dev_close(struct mr_dev *dev)
|
||||
@@ -218,7 +218,7 @@ static int mr_can_dev_close(struct mr_dev *dev)
|
||||
/* Free FIFO buffers */
|
||||
mr_ringbuf_free(&can_dev->rd_fifo);
|
||||
|
||||
return can_dev_filter_configure(can_dev->dev.link, can_dev->id, can_dev->ide, MR_DISABLE);
|
||||
return can_dev_filter_configure(can_dev->dev.parent, can_dev->id, can_dev->ide, MR_DISABLE);
|
||||
}
|
||||
|
||||
static ssize_t mr_can_dev_read(struct mr_dev *dev, int off, void *buf, size_t size, int async)
|
||||
@@ -280,7 +280,7 @@ static int mr_can_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args)
|
||||
{
|
||||
if (args != MR_NULL)
|
||||
{
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)dev->link;
|
||||
struct mr_can_bus *can_bus = (struct mr_can_bus *)dev->parent;
|
||||
struct mr_can_config config = *(struct mr_can_config *)args;
|
||||
|
||||
/* If holding the bus, release it */
|
||||
|
||||
14
device/i2c.c
14
device/i2c.c
@@ -107,7 +107,7 @@ int mr_i2c_bus_register(struct mr_i2c_bus *i2c_bus, const char *name, struct mr_
|
||||
|
||||
MR_INLINE int i2c_dev_take_bus(struct mr_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
struct mr_i2c_bus_ops *ops = (struct mr_i2c_bus_ops *)i2c_bus->dev.drv->ops;
|
||||
|
||||
/* Check if the bus is busy */
|
||||
@@ -138,7 +138,7 @@ MR_INLINE int i2c_dev_take_bus(struct mr_i2c_dev *i2c_dev)
|
||||
|
||||
MR_INLINE int i2c_dev_release_bus(struct mr_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
|
||||
if (i2c_dev != i2c_bus->owner)
|
||||
{
|
||||
@@ -158,7 +158,7 @@ MR_INLINE int i2c_dev_release_bus(struct mr_i2c_dev *i2c_dev)
|
||||
|
||||
MR_INLINE void i2c_dev_send_addr(struct mr_i2c_dev *i2c_dev, int rdwr)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
struct mr_i2c_bus_ops *ops = (struct mr_i2c_bus_ops *)i2c_bus->dev.drv->ops;
|
||||
int addr = 0, addr_bits = MR_I2C_ADDR_BITS_7;
|
||||
|
||||
@@ -181,7 +181,7 @@ MR_INLINE void i2c_dev_send_addr(struct mr_i2c_dev *i2c_dev, int rdwr)
|
||||
|
||||
MR_INLINE void i2c_dev_send_stop(struct mr_i2c_dev *i2c_dev)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
struct mr_i2c_bus_ops *ops = (struct mr_i2c_bus_ops *)i2c_bus->dev.drv->ops;
|
||||
|
||||
ops->stop(i2c_bus);
|
||||
@@ -189,7 +189,7 @@ MR_INLINE void i2c_dev_send_stop(struct mr_i2c_dev *i2c_dev)
|
||||
|
||||
MR_INLINE ssize_t i2c_dev_read(struct mr_i2c_dev *i2c_dev, uint8_t *buf, size_t size)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
struct mr_i2c_bus_ops *ops = (struct mr_i2c_bus_ops *)i2c_bus->dev.drv->ops;
|
||||
uint8_t *rd_buf = (uint8_t *)buf;
|
||||
ssize_t rd_size = 0;
|
||||
@@ -204,7 +204,7 @@ MR_INLINE ssize_t i2c_dev_read(struct mr_i2c_dev *i2c_dev, uint8_t *buf, size_t
|
||||
|
||||
MR_INLINE ssize_t i2c_dev_write(struct mr_i2c_dev *i2c_dev, const uint8_t *buf, size_t size)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)i2c_dev->dev.parent;
|
||||
struct mr_i2c_bus_ops *ops = (struct mr_i2c_bus_ops *)i2c_bus->dev.drv->ops;
|
||||
uint8_t *wr_buf = (uint8_t *)buf;
|
||||
ssize_t wr_size = 0;
|
||||
@@ -311,7 +311,7 @@ static int mr_i2c_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args)
|
||||
{
|
||||
if (args != MR_NULL)
|
||||
{
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)dev->link;
|
||||
struct mr_i2c_bus *i2c_bus = (struct mr_i2c_bus *)dev->parent;
|
||||
struct mr_i2c_config config = *(struct mr_i2c_config *)args;
|
||||
|
||||
/* If holding the bus, release it */
|
||||
|
||||
16
device/spi.c
16
device/spi.c
@@ -139,7 +139,7 @@ int mr_spi_bus_register(struct mr_spi_bus *spi_bus, const char *name, struct mr_
|
||||
#ifdef MR_USING_PIN
|
||||
static void spi_dev_cs_configure(struct mr_spi_dev *spi_dev, int state)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.parent;
|
||||
int desc = spi_bus->cs_desc;
|
||||
|
||||
/* Check the descriptor is valid */
|
||||
@@ -189,7 +189,7 @@ static void spi_dev_cs_configure(struct mr_spi_dev *spi_dev, int state)
|
||||
|
||||
MR_INLINE void spi_dev_cs_set(struct mr_spi_dev *spi_dev, int state)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.parent;
|
||||
|
||||
#ifdef MR_USING_PIN
|
||||
if ((spi_dev->cs_active != MR_SPI_CS_ACTIVE_NONE) && (spi_bus->cs_desc >= 0))
|
||||
@@ -201,7 +201,7 @@ MR_INLINE void spi_dev_cs_set(struct mr_spi_dev *spi_dev, int state)
|
||||
|
||||
MR_INLINE int spi_dev_take_bus(struct mr_spi_dev *spi_dev)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.parent;
|
||||
struct mr_spi_bus_ops *ops = (struct mr_spi_bus_ops *)spi_bus->dev.drv->ops;
|
||||
|
||||
/* Check if the bus is busy */
|
||||
@@ -240,7 +240,7 @@ MR_INLINE int spi_dev_take_bus(struct mr_spi_dev *spi_dev)
|
||||
|
||||
MR_INLINE int spi_dev_release_bus(struct mr_spi_dev *spi_dev)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.parent;
|
||||
|
||||
if (spi_dev != spi_bus->owner)
|
||||
{
|
||||
@@ -261,7 +261,7 @@ MR_INLINE int spi_dev_release_bus(struct mr_spi_dev *spi_dev)
|
||||
|
||||
static ssize_t spi_dev_transfer(struct mr_spi_dev *spi_dev, void *rd_buf, const void *wr_buf, size_t size, int rdwr)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)spi_dev->dev.parent;
|
||||
struct mr_spi_bus_ops *ops = (struct mr_spi_bus_ops *)spi_bus->dev.drv->ops;
|
||||
size_t tf_size = 0;
|
||||
|
||||
@@ -514,7 +514,7 @@ static int mr_spi_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args)
|
||||
{
|
||||
if (args != MR_NULL)
|
||||
{
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)dev->link;
|
||||
struct mr_spi_bus *spi_bus = (struct mr_spi_bus *)dev->parent;
|
||||
struct mr_spi_config config = *(struct mr_spi_config *)args;
|
||||
|
||||
#ifdef MR_USING_PIN
|
||||
@@ -583,7 +583,7 @@ static int mr_spi_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args)
|
||||
if (spi_dev->config.host_slave == MR_SPI_HOST)
|
||||
{
|
||||
spi_dev_cs_set(spi_dev, MR_ENABLE);
|
||||
ret = (int)spi_dev_transfer(dev->link,
|
||||
ret = (int)spi_dev_transfer(dev->parent,
|
||||
transfer.rd_buf,
|
||||
transfer.wr_buf,
|
||||
transfer.size,
|
||||
@@ -591,7 +591,7 @@ static int mr_spi_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args)
|
||||
spi_dev_cs_set(spi_dev, MR_DISABLE);
|
||||
} else
|
||||
{
|
||||
ret = (int)spi_dev_transfer(dev->link,
|
||||
ret = (int)spi_dev_transfer(dev->parent,
|
||||
transfer.rd_buf,
|
||||
transfer.wr_buf,
|
||||
transfer.size,
|
||||
|
||||
Reference in New Issue
Block a user