Commit 2d45c267 authored by Federico Vaga's avatar Federico Vaga

drv: bugfix, register trigger type only once

The bug is that on a second TDC instance, the driver will try to register
again the trigger type. The trigger type needs to be registered only once
at module_init
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent c3f23abb
...@@ -101,7 +101,7 @@ struct ft_hw_timestamp { ...@@ -101,7 +101,7 @@ struct ft_hw_timestamp {
#include "hw/tdc_eic.h" #include "hw/tdc_eic.h"
#include "hw/tdc_dma_eic.h" #include "hw/tdc_dma_eic.h"
extern struct zio_trigger_type ft_trig_type;
extern struct workqueue_struct *ft_workqueue; extern struct workqueue_struct *ft_workqueue;
#define FT_USER_OFFSET_RANGE 1000000000 /* picoseconds */ #define FT_USER_OFFSET_RANGE 1000000000 /* picoseconds */
......
...@@ -593,6 +593,13 @@ static int ft_init(void) ...@@ -593,6 +593,13 @@ static int ft_init(void)
if (ft_workqueue == NULL) if (ft_workqueue == NULL)
return -ENOMEM; return -ENOMEM;
ret = zio_register_trig(&ft_trig_type, FT_ZIO_TRIG_TYPE_NAME);
if (ret) {
pr_err("fmc-tdc: cannot register ZIO trigger type \"%s\" (error %i)\n",
FT_ZIO_TRIG_TYPE_NAME, ret);
goto err_zio_trg;
}
ret = ft_zio_register(); ret = ft_zio_register();
if (ret < 0) if (ret < 0)
goto err_zio; goto err_zio;
...@@ -606,6 +613,8 @@ static int ft_init(void) ...@@ -606,6 +613,8 @@ static int ft_init(void)
err_fmc: err_fmc:
ft_zio_unregister(); ft_zio_unregister();
err_zio: err_zio:
zio_unregister_trig(&ft_trig_type);
err_zio_trg:
destroy_workqueue(ft_workqueue); destroy_workqueue(ft_workqueue);
return ret; return ret;
...@@ -615,6 +624,7 @@ static void ft_exit(void) ...@@ -615,6 +624,7 @@ static void ft_exit(void)
{ {
fmc_driver_unregister(&ft_drv); fmc_driver_unregister(&ft_drv);
ft_zio_unregister(); ft_zio_unregister();
zio_unregister_trig(&ft_trig_type);
destroy_workqueue(ft_workqueue); destroy_workqueue(ft_workqueue);
} }
......
...@@ -551,19 +551,10 @@ int ft_zio_init(struct fmctdc_dev *ft) ...@@ -551,19 +551,10 @@ int ft_zio_init(struct fmctdc_dev *ft)
int err = 0; int err = 0;
int dev_id; int dev_id;
err = zio_register_trig(&ft_trig_type, FT_ZIO_TRIG_TYPE_NAME);
if (err) {
dev_err(&ft->fmc->dev,
"Cannot register ZIO trigger type \"%s\" (error %i)\n",
FT_ZIO_TRIG_TYPE_NAME, err);
return err;
}
ft->hwzdev = zio_allocate_device(); ft->hwzdev = zio_allocate_device();
if (IS_ERR(ft->hwzdev)) { if (IS_ERR(ft->hwzdev))
err = PTR_ERR(ft->hwzdev); return PTR_ERR(ft->hwzdev);
goto err_dev_alloc;
}
/* Mandatory fields */ /* Mandatory fields */
ft->hwzdev->owner = THIS_MODULE; ft->hwzdev->owner = THIS_MODULE;
...@@ -579,8 +570,6 @@ int ft_zio_init(struct fmctdc_dev *ft) ...@@ -579,8 +570,6 @@ int ft_zio_init(struct fmctdc_dev *ft)
err_dev_reg: err_dev_reg:
zio_free_device(ft->hwzdev); zio_free_device(ft->hwzdev);
err_dev_alloc:
zio_unregister_trig(&ft_trig_type);
return err; return err;
} }
...@@ -588,5 +577,4 @@ void ft_zio_exit(struct fmctdc_dev *ft) ...@@ -588,5 +577,4 @@ void ft_zio_exit(struct fmctdc_dev *ft)
{ {
zio_unregister_device(ft->hwzdev); zio_unregister_device(ft->hwzdev);
zio_free_device(ft->hwzdev); zio_free_device(ft->hwzdev);
zio_unregister_trig(&ft_trig_type);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment