[media] SOLO6x10: remove unneeded register locking and barriers
readl() and writel() are atomic, we don't need the spin lock. Also, flushing posted write buffer isn't required. Especially on read :-) Signed-off-by: Krzysztof Ha?asa <khalasa@piap.pl> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
dd43a6278a
commit
e1ceb25a15
|
@ -483,7 +483,6 @@ static int solo_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
|
|
||||||
solo_dev->type = id->driver_data;
|
solo_dev->type = id->driver_data;
|
||||||
solo_dev->pdev = pdev;
|
solo_dev->pdev = pdev;
|
||||||
spin_lock_init(&solo_dev->reg_io_lock);
|
|
||||||
ret = v4l2_device_register(&pdev->dev, &solo_dev->v4l2_dev);
|
ret = v4l2_device_register(&pdev->dev, &solo_dev->v4l2_dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail_probe;
|
goto fail_probe;
|
||||||
|
|
|
@ -199,7 +199,6 @@ struct solo_dev {
|
||||||
int nr_ext;
|
int nr_ext;
|
||||||
u32 irq_mask;
|
u32 irq_mask;
|
||||||
u32 motion_mask;
|
u32 motion_mask;
|
||||||
spinlock_t reg_io_lock;
|
|
||||||
struct v4l2_device v4l2_dev;
|
struct v4l2_device v4l2_dev;
|
||||||
|
|
||||||
/* tw28xx accounting */
|
/* tw28xx accounting */
|
||||||
|
@ -281,36 +280,13 @@ struct solo_dev {
|
||||||
|
|
||||||
static inline u32 solo_reg_read(struct solo_dev *solo_dev, int reg)
|
static inline u32 solo_reg_read(struct solo_dev *solo_dev, int reg)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
return readl(solo_dev->reg_base + reg);
|
||||||
u32 ret;
|
|
||||||
u16 val;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&solo_dev->reg_io_lock, flags);
|
|
||||||
|
|
||||||
ret = readl(solo_dev->reg_base + reg);
|
|
||||||
rmb();
|
|
||||||
pci_read_config_word(solo_dev->pdev, PCI_STATUS, &val);
|
|
||||||
rmb();
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&solo_dev->reg_io_lock, flags);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void solo_reg_write(struct solo_dev *solo_dev, int reg,
|
static inline void solo_reg_write(struct solo_dev *solo_dev, int reg,
|
||||||
u32 data)
|
u32 data)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
u16 val;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&solo_dev->reg_io_lock, flags);
|
|
||||||
|
|
||||||
writel(data, solo_dev->reg_base + reg);
|
writel(data, solo_dev->reg_base + reg);
|
||||||
wmb();
|
|
||||||
pci_read_config_word(solo_dev->pdev, PCI_STATUS, &val);
|
|
||||||
rmb();
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&solo_dev->reg_io_lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void solo_irq_on(struct solo_dev *dev, u32 mask)
|
static inline void solo_irq_on(struct solo_dev *dev, u32 mask)
|
||||||
|
|
Loading…
Reference in New Issue