Skip to content

Commit

Permalink
[media] SOLO6x10: remove unneeded register locking and barriers
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
Krzysztof Hałasa authored and mchehab committed Jul 6, 2015
1 parent dd43a62 commit e1ceb25
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 26 deletions.
1 change: 0 additions & 1 deletion drivers/media/pci/solo6x10/solo6x10-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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->pdev = pdev;
spin_lock_init(&solo_dev->reg_io_lock);
ret = v4l2_device_register(&pdev->dev, &solo_dev->v4l2_dev);
if (ret)
goto fail_probe;
Expand Down
26 changes: 1 addition & 25 deletions drivers/media/pci/solo6x10/solo6x10.h
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ struct solo_dev {
int nr_ext;
u32 irq_mask;
u32 motion_mask;
spinlock_t reg_io_lock;
struct v4l2_device v4l2_dev;

/* tw28xx accounting */
Expand Down Expand Up @@ -281,36 +280,13 @@ struct solo_dev {

static inline u32 solo_reg_read(struct solo_dev *solo_dev, int reg)
{
unsigned long flags;
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;
return readl(solo_dev->reg_base + reg);
}

static inline void solo_reg_write(struct solo_dev *solo_dev, int reg,
u32 data)
{
unsigned long flags;
u16 val;

spin_lock_irqsave(&solo_dev->reg_io_lock, flags);

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)
Expand Down

0 comments on commit e1ceb25

Please sign in to comment.