driver/motor: Remove the unnecessary critical section operation
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com> Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
c0c1e46c5f
commit
a29ee19af4
6 changed files with 20 additions and 103 deletions
|
@ -2037,15 +2037,6 @@ static int stm32_foc_bind(FAR struct foc_dev_s *dev,
|
|||
DEBUGASSERT(cb);
|
||||
DEBUGASSERT(priv);
|
||||
|
||||
/* Do we support given FOC instance? */
|
||||
|
||||
if (dev->devno > CONFIG_MOTOR_FOC_INST)
|
||||
{
|
||||
mtrerr("Unsupported STM32 FOC instance %d\n", dev->devno);
|
||||
ret = -EINVAL;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Validate callbacks */
|
||||
|
||||
DEBUGASSERT(cb->notifier);
|
||||
|
@ -2053,8 +2044,6 @@ static int stm32_foc_bind(FAR struct foc_dev_s *dev,
|
|||
/* Bind upper-half FOC device callbacks */
|
||||
|
||||
priv->cb = cb;
|
||||
|
||||
errout:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ static int sim_foc_pwm_setup(FAR struct foc_dev_s *dev, uint32_t freq)
|
|||
DEBUGASSERT(dev);
|
||||
DEBUGASSERT(sim);
|
||||
|
||||
mtrinfo("[PWM_SETUP] devno=%d freq=%d\n", dev->devno, freq);
|
||||
mtrinfo("[PWM_SETUP] freq=%d\n", freq);
|
||||
|
||||
DEBUGASSERT(freq > 0);
|
||||
|
||||
|
@ -200,7 +200,7 @@ static int sim_foc_start(FAR struct foc_dev_s *dev, bool state)
|
|||
irqstate_t flags;
|
||||
int ret = OK;
|
||||
|
||||
mtrinfo("[FOC_START] devno=%d state=%d\n", dev->devno, state);
|
||||
mtrinfo("[FOC_START] state=%d\n", state);
|
||||
|
||||
/* Start PWM */
|
||||
|
||||
|
@ -242,7 +242,7 @@ static int sim_foc_pwm_start(FAR struct foc_dev_s *dev, bool state)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[PWM_START] devno=%d state=%d\n", dev->devno, state);
|
||||
mtrinfo("[PWM_START] state=%d\n", state);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -259,7 +259,7 @@ static int sim_foc_adc_setup(FAR struct foc_dev_s *dev)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[ADC_SETUP] devno=%d\n", dev->devno);
|
||||
mtrinfo("[ADC_SETUP]\n");
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ static int sim_foc_adc_start(FAR struct foc_dev_s *dev, bool state)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[ADC_START] devno=%d state=%d\n", dev->devno, state);
|
||||
mtrinfo("[ADC_START] state=%d\n", state);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -297,7 +297,7 @@ static int sim_foc_notifier_cfg(FAR struct foc_dev_s *dev, uint32_t freq)
|
|||
DEBUGASSERT(dev);
|
||||
DEBUGASSERT(sim);
|
||||
|
||||
mtrinfo("[NOTIFIER_CFG] devno=%d freq=%d\n", dev->devno, freq);
|
||||
mtrinfo("[NOTIFIER_CFG] freq=%d\n", freq);
|
||||
|
||||
DEBUGASSERT(freq > 0);
|
||||
|
||||
|
@ -336,7 +336,7 @@ static int sim_foc_configure(FAR struct foc_dev_s *dev,
|
|||
DEBUGASSERT(cfg->pwm_freq > 0);
|
||||
DEBUGASSERT(cfg->notifier_freq > 0);
|
||||
|
||||
mtrinfo("[FOC_SETUP] devno=%d\n", dev->devno);
|
||||
mtrinfo("[FOC_SETUP]\n");
|
||||
|
||||
/* Configure ADC */
|
||||
|
||||
|
@ -385,7 +385,7 @@ static int sim_foc_setup(FAR struct foc_dev_s *dev)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[FOC_SETUP] devno=%d\n", dev->devno);
|
||||
mtrinfo("[FOC_SETUP]\n");
|
||||
|
||||
/* Get HW configuration */
|
||||
|
||||
|
@ -406,7 +406,7 @@ static int sim_foc_shutdown(FAR struct foc_dev_s *dev)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[FOC_SHUTDOWN] devno=%d\n", dev->devno);
|
||||
mtrinfo("[FOC_SHUTDOWN]\n");
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -426,7 +426,7 @@ static int sim_foc_ioctl(FAR struct foc_dev_s *dev, int cmd,
|
|||
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[FOC_IOCTL] devno=%d cmd=%d\n", dev->devno, cmd);
|
||||
mtrinfo("[FOC_IOCTL]cmd=%d\n", cmd);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
|
@ -456,8 +456,7 @@ static int sim_foc_notifier_handler(FAR struct foc_dev_s *dev)
|
|||
DEBUGASSERT(dev);
|
||||
DEBUGASSERT(sim);
|
||||
|
||||
mtrinfo("[FOC_NOTIFIER_HANDLER] devno=%d cntr=%d\n",
|
||||
dev->devno, sim->notifier_cntr);
|
||||
mtrinfo("[FOC_NOTIFIER_HANDLER] cntr=%d\n", sim->notifier_cntr);
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
|
@ -500,7 +499,7 @@ static int sim_foc_pwm_duty_set(FAR struct foc_dev_s *dev,
|
|||
DEBUGASSERT(duty[i] >= 0);
|
||||
}
|
||||
|
||||
mtrinfo("[PWM_DUTY_SET] devno=%d duty= ", dev->devno);
|
||||
mtrinfo("[PWM_DUTY_SET]\n");
|
||||
|
||||
#if CONFIG_MOTOR_FOC_PHASES == 2
|
||||
mtrinfo("[%d %d]\n", duty[0], duty[1]);
|
||||
|
@ -551,22 +550,11 @@ static int sim_foc_bind(FAR struct foc_dev_s *dev,
|
|||
DEBUGASSERT(cb);
|
||||
DEBUGASSERT(sim);
|
||||
|
||||
mtrinfo("[FOC_BIND] devno=%d\n", dev->devno);
|
||||
|
||||
/* Do we support given FOC instance? */
|
||||
|
||||
if (dev->devno > CONFIG_MOTOR_FOC_INST)
|
||||
{
|
||||
mtrerr("unsupported SIM FOC instance %d\n", dev->devno);
|
||||
ret = -EINVAL;
|
||||
goto errout;
|
||||
}
|
||||
mtrinfo("[FOC_BIND]\n");
|
||||
|
||||
/* Bind upper-half FOC controller callbacks */
|
||||
|
||||
sim->cb = cb;
|
||||
|
||||
errout:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -582,7 +570,7 @@ static int sim_foc_fault_clear(FAR struct foc_dev_s *dev)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[FAULT_CLEAR] devno=%d\n", dev->devno);
|
||||
mtrinfo("[FAULT_CLEAR]\n");
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -600,8 +588,7 @@ static void sim_foc_trace(FAR struct foc_dev_s *dev, int type, bool state)
|
|||
{
|
||||
DEBUGASSERT(dev);
|
||||
|
||||
mtrinfo("[FOC_TRACE] devno=%d type=%d state=%d\n",
|
||||
dev->devno, type, state);
|
||||
mtrinfo("[FOC_TRACE] type=%d state=%d\n", type, state);
|
||||
}
|
||||
#endif /* CONFIG_MOTOR_FOC_TRACE */
|
||||
|
||||
|
|
|
@ -68,10 +68,6 @@ static int foc_notifier(FAR struct foc_dev_s *dev,
|
|||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/* Device counter */
|
||||
|
||||
static uint8_t g_devno_cntr = 0;
|
||||
|
||||
/* File operations */
|
||||
|
||||
static const struct file_operations g_foc_fops =
|
||||
|
@ -113,7 +109,6 @@ static int foc_open(FAR struct file *filep)
|
|||
FAR struct foc_dev_s *dev = inode->i_private;
|
||||
uint8_t tmp = 0;
|
||||
int ret = OK;
|
||||
irqstate_t flags;
|
||||
|
||||
/* Non-blocking operations not supported */
|
||||
|
||||
|
@ -147,10 +142,6 @@ static int foc_open(FAR struct file *filep)
|
|||
|
||||
if (tmp == 1)
|
||||
{
|
||||
/* Yes.. perform one time driver setup */
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
ret = foc_setup(dev);
|
||||
if (ret == OK)
|
||||
{
|
||||
|
@ -158,8 +149,6 @@ static int foc_open(FAR struct file *filep)
|
|||
|
||||
dev->ocount = tmp;
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -189,7 +178,6 @@ static int foc_close(FAR struct file *filep)
|
|||
FAR struct inode *inode = filep->f_inode;
|
||||
FAR struct foc_dev_s *dev = inode->i_private;
|
||||
int ret = 0;
|
||||
irqstate_t flags;
|
||||
|
||||
ret = nxsem_wait(&dev->closesem);
|
||||
if (ret >= 0)
|
||||
|
@ -211,10 +199,7 @@ static int foc_close(FAR struct file *filep)
|
|||
|
||||
/* Shutdown the device */
|
||||
|
||||
flags = enter_critical_section();
|
||||
ret = foc_shutdown(dev);
|
||||
leave_critical_section(flags);
|
||||
|
||||
nxsem_post(&dev->closesem);
|
||||
}
|
||||
}
|
||||
|
@ -259,9 +244,6 @@ static int foc_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||
FAR struct inode *inode = filep->f_inode;
|
||||
FAR struct foc_dev_s *dev = inode->i_private;
|
||||
int ret = 0;
|
||||
irqstate_t flags;
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
|
@ -388,8 +370,6 @@ static int foc_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||
}
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -462,7 +442,6 @@ static int foc_setup(FAR struct foc_dev_s *dev)
|
|||
if (ret < 0)
|
||||
{
|
||||
mtrerr("foc_lower_bind failed %d\n", ret);
|
||||
set_errno(EINVAL);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
|
@ -606,8 +585,8 @@ static int foc_cfg_set(FAR struct foc_dev_s *dev, FAR struct foc_cfg_s *cfg)
|
|||
|
||||
memcpy(&dev->cfg, cfg, sizeof(struct foc_cfg_s));
|
||||
|
||||
mtrinfo("FOC %" PRIu8 " PWM=%" PRIu32 " notifier=%" PRIu32 "\n",
|
||||
dev->devno, dev->cfg.pwm_freq, dev->cfg.notifier_freq);
|
||||
mtrinfo("FOC PWM=%" PRIu32 " notifier=%" PRIu32 "\n",
|
||||
dev->cfg.pwm_freq, dev->cfg.notifier_freq);
|
||||
|
||||
/* Call arch configuration */
|
||||
|
||||
|
@ -762,13 +741,6 @@ static int foc_notifier(FAR struct foc_dev_s *dev,
|
|||
FOC_OPS_TRACE(dev, FOC_TRACE_NOTIFIER, true);
|
||||
#endif
|
||||
|
||||
/* Disable pre-emption until all of the waiting threads have been
|
||||
* restarted. This is necessary to assure that the sval behaves as
|
||||
* expected in the following while loop
|
||||
*/
|
||||
|
||||
sched_lock();
|
||||
|
||||
/* Copy currents */
|
||||
|
||||
memcpy(&dev->state.curr,
|
||||
|
@ -817,10 +789,6 @@ static int foc_notifier(FAR struct foc_dev_s *dev,
|
|||
}
|
||||
}
|
||||
|
||||
/* Now we can let the restarted threads run */
|
||||
|
||||
sched_unlock();
|
||||
|
||||
#ifdef CONFIG_MOTOR_FOC_TRACE
|
||||
FOC_OPS_TRACE(dev, FOC_TRACE_NOTIFIER, false);
|
||||
#endif
|
||||
|
@ -857,24 +825,10 @@ int foc_register(FAR const char *path, FAR struct foc_dev_s *dev)
|
|||
DEBUGASSERT(dev->lower->ops);
|
||||
DEBUGASSERT(dev->lower->data);
|
||||
|
||||
/* Check if the device instance is supported by the driver */
|
||||
|
||||
if (dev->devno > CONFIG_MOTOR_FOC_INST)
|
||||
{
|
||||
mtrerr("Unsupported foc devno %d\n\n", dev->devno);
|
||||
set_errno(EINVAL);
|
||||
ret = ERROR;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Reset counter */
|
||||
|
||||
dev->ocount = 0;
|
||||
|
||||
/* Store device number */
|
||||
|
||||
dev->devno = g_devno_cntr;
|
||||
|
||||
/* Assert the lower-half interface */
|
||||
|
||||
ret = foc_lower_ops_assert(dev->lower->ops);
|
||||
|
@ -895,15 +849,10 @@ int foc_register(FAR const char *path, FAR struct foc_dev_s *dev)
|
|||
if (ret < 0)
|
||||
{
|
||||
nxsem_destroy(&dev->closesem);
|
||||
set_errno(ret);
|
||||
ret = ERROR;
|
||||
nxsem_destroy(&dev->statesem);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Increase device counter */
|
||||
|
||||
g_devno_cntr += 1;
|
||||
|
||||
errout:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -133,7 +133,6 @@ static int motor_open(FAR struct file *filep)
|
|||
{
|
||||
/* Yes.. perform one time hardware initialization. */
|
||||
|
||||
irqstate_t flags = enter_critical_section();
|
||||
ret = lower->ops->setup(lower);
|
||||
if (ret == OK)
|
||||
{
|
||||
|
@ -141,8 +140,6 @@ static int motor_open(FAR struct file *filep)
|
|||
|
||||
upper->ocount = tmp;
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -165,7 +162,6 @@ static int motor_close(FAR struct file *filep)
|
|||
FAR struct inode *inode = filep->f_inode;
|
||||
FAR struct motor_upperhalf_s *upper = inode->i_private;
|
||||
FAR struct motor_lowerhalf_s *lower = upper->lower;
|
||||
irqstate_t flags;
|
||||
int ret;
|
||||
|
||||
ret = nxsem_wait(&upper->closesem);
|
||||
|
@ -188,10 +184,7 @@ static int motor_close(FAR struct file *filep)
|
|||
|
||||
/* Free the IRQ and disable the motor device */
|
||||
|
||||
flags = enter_critical_section(); /* Disable interrupts */
|
||||
lower->ops->shutdown(lower); /* Disable the motor */
|
||||
leave_critical_section(flags);
|
||||
|
||||
nxsem_post(&upper->closesem);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,7 +112,6 @@ struct foc_dev_s
|
|||
{
|
||||
/* Fields managed by common upper-half FOC logic **************************/
|
||||
|
||||
uint8_t devno; /* FOC device instance number */
|
||||
uint8_t ocount; /* The number of times the device
|
||||
* has been opened
|
||||
*/
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __INCLUDE_NUTTX_DRIVERS_MOTOR_MOTOR_H
|
||||
#define __INCLUDE_NUTTX_DRIVERS_MOTOR_MOTOR_H
|
||||
#ifndef __INCLUDE_NUTTX_MOTOR_MOTOR_H
|
||||
#define __INCLUDE_NUTTX_MOTOR_MOTOR_H
|
||||
|
||||
/* The motor driver is split into two parts:
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue