mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
Merge branch 'tbsdtv_linux_media/master' into tbsdtv_linux_media/latest
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/i2c.h>
|
||||
|
@@ -665,7 +665,7 @@ static int ccs_set_ctrl(struct v4l2_ctrl *ctrl)
|
||||
break;
|
||||
}
|
||||
|
||||
pm_status = pm_runtime_get_if_active(&client->dev, true);
|
||||
pm_status = pm_runtime_get_if_active(&client->dev);
|
||||
if (!pm_status)
|
||||
return 0;
|
||||
|
||||
|
@@ -35,7 +35,7 @@ struct netup_spi_regs {
|
||||
|
||||
struct netup_spi {
|
||||
struct device *dev;
|
||||
struct spi_master *master;
|
||||
struct spi_controller *ctlr;
|
||||
struct netup_spi_regs __iomem *regs;
|
||||
u8 __iomem *mmio;
|
||||
spinlock_t lock;
|
||||
@@ -78,7 +78,7 @@ irqreturn_t netup_spi_interrupt(struct netup_spi *spi)
|
||||
reg = readw(&spi->regs->control_stat);
|
||||
if (!(reg & NETUP_SPI_CTRL_IRQ)) {
|
||||
spin_unlock_irqrestore(&spi->lock, flags);
|
||||
dev_dbg(&spi->master->dev,
|
||||
dev_dbg(&spi->ctlr->dev,
|
||||
"%s(): not mine interrupt\n", __func__);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
@@ -88,15 +88,15 @@ irqreturn_t netup_spi_interrupt(struct netup_spi *spi)
|
||||
spi->state = SPI_STATE_DONE;
|
||||
wake_up(&spi->waitq);
|
||||
spin_unlock_irqrestore(&spi->lock, flags);
|
||||
dev_dbg(&spi->master->dev,
|
||||
dev_dbg(&spi->ctlr->dev,
|
||||
"%s(): SPI interrupt handled\n", __func__);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int netup_spi_transfer(struct spi_master *master,
|
||||
static int netup_spi_transfer(struct spi_controller *ctlr,
|
||||
struct spi_message *msg)
|
||||
{
|
||||
struct netup_spi *spi = spi_master_get_devdata(master);
|
||||
struct netup_spi *spi = spi_controller_get_devdata(ctlr);
|
||||
struct spi_transfer *t;
|
||||
int result = 0;
|
||||
u32 tr_size;
|
||||
@@ -131,7 +131,7 @@ static int netup_spi_transfer(struct spi_master *master,
|
||||
NETUP_SPI_CTRL_START |
|
||||
(frag_last ? NETUP_SPI_CTRL_LAST_CS : 0),
|
||||
&spi->regs->control_stat);
|
||||
dev_dbg(&spi->master->dev,
|
||||
dev_dbg(&spi->ctlr->dev,
|
||||
"%s(): control_stat 0x%04x\n",
|
||||
__func__, readw(&spi->regs->control_stat));
|
||||
wait_event_timeout(spi->waitq,
|
||||
@@ -144,11 +144,11 @@ static int netup_spi_transfer(struct spi_master *master,
|
||||
}
|
||||
} else {
|
||||
if (spi->state == SPI_STATE_START) {
|
||||
dev_dbg(&spi->master->dev,
|
||||
dev_dbg(&spi->ctlr->dev,
|
||||
"%s(): transfer timeout\n",
|
||||
__func__);
|
||||
} else {
|
||||
dev_dbg(&spi->master->dev,
|
||||
dev_dbg(&spi->ctlr->dev,
|
||||
"%s(): invalid state %d\n",
|
||||
__func__, spi->state);
|
||||
}
|
||||
@@ -161,7 +161,7 @@ static int netup_spi_transfer(struct spi_master *master,
|
||||
}
|
||||
done:
|
||||
msg->status = result;
|
||||
spi_finalize_current_message(master);
|
||||
spi_finalize_current_message(ctlr);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -172,30 +172,30 @@ static int netup_spi_setup(struct spi_device *spi)
|
||||
|
||||
int netup_spi_init(struct netup_unidvb_dev *ndev)
|
||||
{
|
||||
struct spi_master *master;
|
||||
struct spi_controller *ctlr;
|
||||
struct netup_spi *nspi;
|
||||
|
||||
master = devm_spi_alloc_master(&ndev->pci_dev->dev,
|
||||
sizeof(struct netup_spi));
|
||||
if (!master) {
|
||||
ctlr = devm_spi_alloc_master(&ndev->pci_dev->dev,
|
||||
sizeof(struct netup_spi));
|
||||
if (!ctlr) {
|
||||
dev_err(&ndev->pci_dev->dev,
|
||||
"%s(): unable to alloc SPI master\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
nspi = spi_master_get_devdata(master);
|
||||
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
|
||||
master->bus_num = -1;
|
||||
master->num_chipselect = 1;
|
||||
master->transfer_one_message = netup_spi_transfer;
|
||||
master->setup = netup_spi_setup;
|
||||
nspi = spi_controller_get_devdata(ctlr);
|
||||
ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
|
||||
ctlr->bus_num = -1;
|
||||
ctlr->num_chipselect = 1;
|
||||
ctlr->transfer_one_message = netup_spi_transfer;
|
||||
ctlr->setup = netup_spi_setup;
|
||||
spin_lock_init(&nspi->lock);
|
||||
init_waitqueue_head(&nspi->waitq);
|
||||
nspi->master = master;
|
||||
nspi->ctlr = ctlr;
|
||||
nspi->regs = (struct netup_spi_regs __iomem *)(ndev->bmmio0 + 0x4000);
|
||||
writew(2, &nspi->regs->clock_divider);
|
||||
writew(NETUP_UNIDVB_IRQ_SPI, ndev->bmmio0 + REG_IMASK_SET);
|
||||
ndev->spi = nspi;
|
||||
if (spi_register_master(master)) {
|
||||
if (spi_register_controller(ctlr)) {
|
||||
ndev->spi = NULL;
|
||||
dev_err(&ndev->pci_dev->dev,
|
||||
"%s(): unable to register SPI bus\n", __func__);
|
||||
@@ -207,8 +207,8 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)
|
||||
ndev->pci_bus,
|
||||
ndev->pci_slot,
|
||||
ndev->pci_func);
|
||||
if (!spi_new_device(master, &netup_spi_board)) {
|
||||
spi_unregister_master(master);
|
||||
if (!spi_new_device(ctlr, &netup_spi_board)) {
|
||||
spi_unregister_controller(ctlr);
|
||||
ndev->spi = NULL;
|
||||
dev_err(&ndev->pci_dev->dev,
|
||||
"%s(): unable to create SPI device\n", __func__);
|
||||
@@ -227,7 +227,7 @@ void netup_spi_release(struct netup_unidvb_dev *ndev)
|
||||
if (!spi)
|
||||
return;
|
||||
|
||||
spi_unregister_master(spi->master);
|
||||
spi_unregister_controller(spi->ctlr);
|
||||
spin_lock_irqsave(&spi->lock, flags);
|
||||
reg = readw(&spi->regs->control_stat);
|
||||
writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat);
|
||||
|
@@ -107,7 +107,7 @@ struct msi2500_dev {
|
||||
struct video_device vdev;
|
||||
struct v4l2_device v4l2_dev;
|
||||
struct v4l2_subdev *v4l2_subdev;
|
||||
struct spi_master *master;
|
||||
struct spi_controller *ctlr;
|
||||
|
||||
/* videobuf2 queue and queued buffers list */
|
||||
struct vb2_queue vb_queue;
|
||||
@@ -574,7 +574,7 @@ static void msi2500_disconnect(struct usb_interface *intf)
|
||||
dev->udev = NULL;
|
||||
v4l2_device_disconnect(&dev->v4l2_dev);
|
||||
video_unregister_device(&dev->vdev);
|
||||
spi_unregister_master(dev->master);
|
||||
spi_unregister_controller(dev->ctlr);
|
||||
mutex_unlock(&dev->v4l2_lock);
|
||||
mutex_unlock(&dev->vb_queue_lock);
|
||||
|
||||
@@ -1136,10 +1136,10 @@ static void msi2500_video_release(struct v4l2_device *v)
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
static int msi2500_transfer_one_message(struct spi_master *master,
|
||||
static int msi2500_transfer_one_message(struct spi_controller *ctlr,
|
||||
struct spi_message *m)
|
||||
{
|
||||
struct msi2500_dev *dev = spi_master_get_devdata(master);
|
||||
struct msi2500_dev *dev = spi_controller_get_devdata(ctlr);
|
||||
struct spi_transfer *t;
|
||||
int ret = 0;
|
||||
u32 data;
|
||||
@@ -1154,7 +1154,7 @@ static int msi2500_transfer_one_message(struct spi_master *master,
|
||||
}
|
||||
|
||||
m->status = ret;
|
||||
spi_finalize_current_message(master);
|
||||
spi_finalize_current_message(ctlr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1163,7 +1163,7 @@ static int msi2500_probe(struct usb_interface *intf,
|
||||
{
|
||||
struct msi2500_dev *dev;
|
||||
struct v4l2_subdev *sd;
|
||||
struct spi_master *master;
|
||||
struct spi_controller *ctlr;
|
||||
int ret;
|
||||
static struct spi_board_info board_info = {
|
||||
.modalias = "msi001",
|
||||
@@ -1220,30 +1220,30 @@ static int msi2500_probe(struct usb_interface *intf,
|
||||
}
|
||||
|
||||
/* SPI master adapter */
|
||||
master = spi_alloc_master(dev->dev, 0);
|
||||
if (master == NULL) {
|
||||
ctlr = spi_alloc_master(dev->dev, 0);
|
||||
if (ctlr == NULL) {
|
||||
ret = -ENOMEM;
|
||||
goto err_unregister_v4l2_dev;
|
||||
}
|
||||
|
||||
dev->master = master;
|
||||
master->bus_num = -1;
|
||||
master->num_chipselect = 1;
|
||||
master->transfer_one_message = msi2500_transfer_one_message;
|
||||
spi_master_set_devdata(master, dev);
|
||||
ret = spi_register_master(master);
|
||||
dev->ctlr = ctlr;
|
||||
ctlr->bus_num = -1;
|
||||
ctlr->num_chipselect = 1;
|
||||
ctlr->transfer_one_message = msi2500_transfer_one_message;
|
||||
spi_controller_set_devdata(ctlr, dev);
|
||||
ret = spi_register_controller(ctlr);
|
||||
if (ret) {
|
||||
spi_master_put(master);
|
||||
spi_controller_put(ctlr);
|
||||
goto err_unregister_v4l2_dev;
|
||||
}
|
||||
|
||||
/* load v4l2 subdevice */
|
||||
sd = v4l2_spi_new_subdev(&dev->v4l2_dev, master, &board_info);
|
||||
sd = v4l2_spi_new_subdev(&dev->v4l2_dev, ctlr, &board_info);
|
||||
dev->v4l2_subdev = sd;
|
||||
if (sd == NULL) {
|
||||
dev_err(dev->dev, "cannot get v4l2 subdevice\n");
|
||||
ret = -ENODEV;
|
||||
goto err_unregister_master;
|
||||
goto err_unregister_controller;
|
||||
}
|
||||
|
||||
/* Register controls */
|
||||
@@ -1276,8 +1276,8 @@ static int msi2500_probe(struct usb_interface *intf,
|
||||
return 0;
|
||||
err_free_controls:
|
||||
v4l2_ctrl_handler_free(&dev->hdl);
|
||||
err_unregister_master:
|
||||
spi_unregister_master(dev->master);
|
||||
err_unregister_controller:
|
||||
spi_unregister_controller(dev->ctlr);
|
||||
err_unregister_v4l2_dev:
|
||||
v4l2_device_unregister(&dev->v4l2_dev);
|
||||
err_free_mem:
|
||||
|
@@ -34,7 +34,7 @@ void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
|
||||
EXPORT_SYMBOL_GPL(v4l2_spi_subdev_init);
|
||||
|
||||
struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct spi_master *master,
|
||||
struct spi_controller *ctlr,
|
||||
struct spi_board_info *info)
|
||||
{
|
||||
struct v4l2_subdev *sd = NULL;
|
||||
@@ -45,7 +45,7 @@ struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
if (info->modalias[0])
|
||||
request_module(info->modalias);
|
||||
|
||||
spi = spi_new_device(master, info);
|
||||
spi = spi_new_device(ctlr, info);
|
||||
|
||||
if (!spi || !spi->dev.driver)
|
||||
goto error;
|
||||
|
@@ -278,13 +278,13 @@ static inline void v4l2_i2c_subdev_unregister(struct v4l2_subdev *sd)
|
||||
*
|
||||
*
|
||||
* @v4l2_dev: pointer to &struct v4l2_device.
|
||||
* @master: pointer to struct spi_master.
|
||||
* @ctlr: pointer to struct spi_controller.
|
||||
* @info: pointer to struct spi_board_info.
|
||||
*
|
||||
* returns a &struct v4l2_subdev pointer.
|
||||
*/
|
||||
struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct spi_master *master, struct spi_board_info *info);
|
||||
struct spi_controller *ctlr, struct spi_board_info *info);
|
||||
|
||||
/**
|
||||
* v4l2_spi_subdev_init - Initialize a v4l2_subdev with data from an
|
||||
@@ -308,7 +308,7 @@ void v4l2_spi_subdev_unregister(struct v4l2_subdev *sd);
|
||||
|
||||
static inline struct v4l2_subdev *
|
||||
v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
|
||||
struct spi_master *master, struct spi_board_info *info)
|
||||
struct spi_controller *ctlr, struct spi_board_info *info)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user