[device] Avoid repeated calls device_open interface. (#7476)

This commit is contained in:
guo 2023-05-15 14:58:56 +08:00 committed by GitHub
parent a5211c70b6
commit 8a1260c56a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -233,15 +233,19 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return -RT_EBUSY; return -RT_EBUSY;
} }
/* call device_open interface */ /* device is not opened or opened by other oflag, call device_open interface */
if (device_open != RT_NULL) if (!(dev->open_flag & RT_DEVICE_OFLAG_OPEN) ||
((dev->open_flag & RT_DEVICE_OFLAG_MASK) | (oflag & RT_DEVICE_OFLAG_MASK)))
{ {
result = device_open(dev, oflag); if (device_open != RT_NULL)
} {
else result = device_open(dev, oflag);
{ }
/* set open flag */ else
dev->open_flag = (oflag & RT_DEVICE_OFLAG_MASK); {
/* set open flag */
dev->open_flag = (oflag & RT_DEVICE_OFLAG_MASK);
}
} }
/* set open flag */ /* set open flag */
@ -251,7 +255,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
dev->ref_count++; dev->ref_count++;
/* don't let bad things happen silently. If you are bitten by this assert, /* don't let bad things happen silently. If you are bitten by this assert,
* please set the ref_count to a bigger type. */ * please set the ref_count to a bigger type. */
RT_ASSERT(dev->ref_count != 0); RT_ASSERT(dev->ref_count != 0);
} }
@ -475,13 +479,13 @@ rt_err_t rt_device_bind_driver(rt_device_t device, rt_driver_t driver, void *nod
} }
device->drv = driver; device->drv = driver;
#ifdef RT_USING_DEVICE_OPS #ifdef RT_USING_DEVICE_OPS
device->ops = driver->dev_ops; device->ops = driver->dev_ops;
#endif #endif
device->dtb_node = node; device->dtb_node = node;
return RT_EOK; return RT_EOK;
} }
RTM_EXPORT(rt_device_bind_driver); RTM_EXPORT(rt_device_bind_driver);
/** /**