Merge remote-tracking branch 'spi/topic/pdata' into spi-next
commit
68aa4cb337
|
@ -200,7 +200,7 @@ static irqreturn_t altera_spi_irq(int irq, void *dev)
|
||||||
|
|
||||||
static int altera_spi_probe(struct platform_device *pdev)
|
static int altera_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct altera_spi_platform_data *platp = pdev->dev.platform_data;
|
struct altera_spi_platform_data *platp = dev_get_platdata(&pdev->dev);
|
||||||
struct altera_spi *hw;
|
struct altera_spi *hw;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
|
|
@ -221,7 +221,7 @@ static int ath79_spi_probe(struct platform_device *pdev)
|
||||||
sp = spi_master_get_devdata(master);
|
sp = spi_master_get_devdata(master);
|
||||||
platform_set_drvdata(pdev, sp);
|
platform_set_drvdata(pdev, sp);
|
||||||
|
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
|
|
||||||
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
|
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
|
||||||
master->setup = ath79_spi_setup;
|
master->setup = ath79_spi_setup;
|
||||||
|
|
|
@ -776,7 +776,7 @@ static int au1550_spi_probe(struct platform_device *pdev)
|
||||||
hw = spi_master_get_devdata(master);
|
hw = spi_master_get_devdata(master);
|
||||||
|
|
||||||
hw->master = spi_master_get(master);
|
hw->master = spi_master_get(master);
|
||||||
hw->pdata = pdev->dev.platform_data;
|
hw->pdata = dev_get_platdata(&pdev->dev);
|
||||||
hw->dev = &pdev->dev;
|
hw->dev = &pdev->dev;
|
||||||
|
|
||||||
if (hw->pdata == NULL) {
|
if (hw->pdata == NULL) {
|
||||||
|
|
|
@ -353,7 +353,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct resource *r;
|
struct resource *r;
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct bcm63xx_spi_pdata *pdata = pdev->dev.platform_data;
|
struct bcm63xx_spi_pdata *pdata = dev_get_platdata(&pdev->dev);
|
||||||
int irq;
|
int irq;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
@ -474,8 +474,7 @@ static int bcm63xx_spi_remove(struct platform_device *pdev)
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static int bcm63xx_spi_suspend(struct device *dev)
|
static int bcm63xx_spi_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct spi_master *master =
|
struct spi_master *master = dev_get_drvdata(dev);
|
||||||
platform_get_drvdata(to_platform_device(dev));
|
|
||||||
struct bcm63xx_spi *bs = spi_master_get_devdata(master);
|
struct bcm63xx_spi *bs = spi_master_get_devdata(master);
|
||||||
|
|
||||||
spi_master_suspend(master);
|
spi_master_suspend(master);
|
||||||
|
@ -487,8 +486,7 @@ static int bcm63xx_spi_suspend(struct device *dev)
|
||||||
|
|
||||||
static int bcm63xx_spi_resume(struct device *dev)
|
static int bcm63xx_spi_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct spi_master *master =
|
struct spi_master *master = dev_get_drvdata(dev);
|
||||||
platform_get_drvdata(to_platform_device(dev));
|
|
||||||
struct bcm63xx_spi *bs = spi_master_get_devdata(master);
|
struct bcm63xx_spi *bs = spi_master_get_devdata(master);
|
||||||
|
|
||||||
clk_prepare_enable(bs->clk);
|
clk_prepare_enable(bs->clk);
|
||||||
|
|
|
@ -756,7 +756,7 @@ static int bfin_sport_spi_probe(struct platform_device *pdev)
|
||||||
struct bfin_sport_spi_master_data *drv_data;
|
struct bfin_sport_spi_master_data *drv_data;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
platform_info = dev->platform_data;
|
platform_info = dev_get_platdata(dev);
|
||||||
|
|
||||||
/* Allocate master with space for drv_data */
|
/* Allocate master with space for drv_data */
|
||||||
master = spi_alloc_master(dev, sizeof(*master) + 16);
|
master = spi_alloc_master(dev, sizeof(*master) + 16);
|
||||||
|
|
|
@ -773,7 +773,7 @@ static irqreturn_t bfin_spi_rx_dma_isr(int irq, void *dev_id)
|
||||||
static int bfin_spi_probe(struct platform_device *pdev)
|
static int bfin_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct bfin_spi3_master *info = dev->platform_data;
|
struct bfin_spi3_master *info = dev_get_platdata(dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct bfin_spi_master *drv_data;
|
struct bfin_spi_master *drv_data;
|
||||||
struct resource *mem, *res;
|
struct resource *mem, *res;
|
||||||
|
|
|
@ -1271,7 +1271,7 @@ static int bfin_spi_probe(struct platform_device *pdev)
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
platform_info = dev->platform_data;
|
platform_info = dev_get_platdata(dev);
|
||||||
|
|
||||||
/* Allocate master with space for drv_data */
|
/* Allocate master with space for drv_data */
|
||||||
master = spi_alloc_master(dev, sizeof(*drv_data));
|
master = spi_alloc_master(dev, sizeof(*drv_data));
|
||||||
|
|
|
@ -400,7 +400,7 @@ static int mcfqspi_probe(struct platform_device *pdev)
|
||||||
struct mcfqspi_platform_data *pdata;
|
struct mcfqspi_platform_data *pdata;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
dev_dbg(&pdev->dev, "platform data is missing\n");
|
dev_dbg(&pdev->dev, "platform data is missing\n");
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
@ -558,7 +558,7 @@ static int mcfqspi_resume(struct device *dev)
|
||||||
#ifdef CONFIG_PM_RUNTIME
|
#ifdef CONFIG_PM_RUNTIME
|
||||||
static int mcfqspi_runtime_suspend(struct device *dev)
|
static int mcfqspi_runtime_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct mcfqspi *mcfqspi = platform_get_drvdata(to_platform_device(dev));
|
struct mcfqspi *mcfqspi = dev_get_drvdata(dev);
|
||||||
|
|
||||||
clk_disable(mcfqspi->clk);
|
clk_disable(mcfqspi->clk);
|
||||||
|
|
||||||
|
@ -567,7 +567,7 @@ static int mcfqspi_runtime_suspend(struct device *dev)
|
||||||
|
|
||||||
static int mcfqspi_runtime_resume(struct device *dev)
|
static int mcfqspi_runtime_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct mcfqspi *mcfqspi = platform_get_drvdata(to_platform_device(dev));
|
struct mcfqspi *mcfqspi = dev_get_drvdata(dev);
|
||||||
|
|
||||||
clk_enable(mcfqspi->clk);
|
clk_enable(mcfqspi->clk);
|
||||||
|
|
||||||
|
|
|
@ -872,8 +872,8 @@ static int davinci_spi_probe(struct platform_device *pdev)
|
||||||
goto free_master;
|
goto free_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pdev->dev.platform_data) {
|
if (dev_get_platdata(&pdev->dev)) {
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
dspi->pdata = *pdata;
|
dspi->pdata = *pdata;
|
||||||
} else {
|
} else {
|
||||||
/* update dspi pdata with that from the DT */
|
/* update dspi pdata with that from the DT */
|
||||||
|
|
|
@ -874,7 +874,7 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
|
||||||
int irq;
|
int irq;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
info = pdev->dev.platform_data;
|
info = dev_get_platdata(&pdev->dev);
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
|
|
|
@ -584,7 +584,7 @@ static void fsl_espi_remove(struct mpc8xxx_spi *mspi)
|
||||||
static struct spi_master * fsl_espi_probe(struct device *dev,
|
static struct spi_master * fsl_espi_probe(struct device *dev,
|
||||||
struct resource *mem, unsigned int irq)
|
struct resource *mem, unsigned int irq)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct mpc8xxx_spi *mpc8xxx_spi;
|
struct mpc8xxx_spi *mpc8xxx_spi;
|
||||||
struct fsl_espi_reg *reg_base;
|
struct fsl_espi_reg *reg_base;
|
||||||
|
@ -665,7 +665,7 @@ err:
|
||||||
static int of_fsl_espi_get_chipselects(struct device *dev)
|
static int of_fsl_espi_get_chipselects(struct device *dev)
|
||||||
{
|
{
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
const u32 *prop;
|
const u32 *prop;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ const char *mpc8xxx_spi_strmode(unsigned int flags)
|
||||||
int mpc8xxx_spi_probe(struct device *dev, struct resource *mem,
|
int mpc8xxx_spi_probe(struct device *dev, struct resource *mem,
|
||||||
unsigned int irq)
|
unsigned int irq)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct mpc8xxx_spi *mpc8xxx_spi;
|
struct mpc8xxx_spi *mpc8xxx_spi;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
|
@ -574,7 +574,7 @@ static void fsl_spi_grlib_cs_control(struct spi_device *spi, bool on)
|
||||||
|
|
||||||
static void fsl_spi_grlib_probe(struct device *dev)
|
static void fsl_spi_grlib_probe(struct device *dev)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct spi_master *master = dev_get_drvdata(dev);
|
struct spi_master *master = dev_get_drvdata(dev);
|
||||||
struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
|
struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
|
||||||
struct fsl_spi_reg *reg_base = mpc8xxx_spi->reg_base;
|
struct fsl_spi_reg *reg_base = mpc8xxx_spi->reg_base;
|
||||||
|
@ -600,7 +600,7 @@ static void fsl_spi_grlib_probe(struct device *dev)
|
||||||
static struct spi_master * fsl_spi_probe(struct device *dev,
|
static struct spi_master * fsl_spi_probe(struct device *dev,
|
||||||
struct resource *mem, unsigned int irq)
|
struct resource *mem, unsigned int irq)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct mpc8xxx_spi *mpc8xxx_spi;
|
struct mpc8xxx_spi *mpc8xxx_spi;
|
||||||
struct fsl_spi_reg *reg_base;
|
struct fsl_spi_reg *reg_base;
|
||||||
|
@ -700,7 +700,8 @@ err:
|
||||||
static void fsl_spi_cs_control(struct spi_device *spi, bool on)
|
static void fsl_spi_cs_control(struct spi_device *spi, bool on)
|
||||||
{
|
{
|
||||||
struct device *dev = spi->dev.parent->parent;
|
struct device *dev = spi->dev.parent->parent;
|
||||||
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
|
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
|
||||||
u16 cs = spi->chip_select;
|
u16 cs = spi->chip_select;
|
||||||
int gpio = pinfo->gpios[cs];
|
int gpio = pinfo->gpios[cs];
|
||||||
bool alow = pinfo->alow_flags[cs];
|
bool alow = pinfo->alow_flags[cs];
|
||||||
|
@ -711,7 +712,7 @@ static void fsl_spi_cs_control(struct spi_device *spi, bool on)
|
||||||
static int of_fsl_spi_get_chipselects(struct device *dev)
|
static int of_fsl_spi_get_chipselects(struct device *dev)
|
||||||
{
|
{
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
|
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
|
||||||
int ngpios;
|
int ngpios;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -790,7 +791,7 @@ err_alloc_flags:
|
||||||
|
|
||||||
static int of_fsl_spi_free_chipselects(struct device *dev)
|
static int of_fsl_spi_free_chipselects(struct device *dev)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
|
struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -889,7 +890,7 @@ static int plat_mpc8xxx_spi_probe(struct platform_device *pdev)
|
||||||
int irq;
|
int irq;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
|
|
||||||
if (!pdev->dev.platform_data)
|
if (!dev_get_platdata(&pdev->dev))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
|
|
@ -420,7 +420,7 @@ static int spi_gpio_probe(struct platform_device *pdev)
|
||||||
if (status > 0)
|
if (status > 0)
|
||||||
use_of = 1;
|
use_of = 1;
|
||||||
|
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
#ifdef GENERIC_BITBANG
|
#ifdef GENERIC_BITBANG
|
||||||
if (!pdata || !pdata->num_chipselect)
|
if (!pdata || !pdata->num_chipselect)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -506,7 +506,7 @@ static int spi_gpio_remove(struct platform_device *pdev)
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
spi_gpio = platform_get_drvdata(pdev);
|
spi_gpio = platform_get_drvdata(pdev);
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
|
|
||||||
/* stop() unregisters child devices too */
|
/* stop() unregisters child devices too */
|
||||||
status = spi_bitbang_stop(&spi_gpio->bitbang);
|
status = spi_bitbang_stop(&spi_gpio->bitbang);
|
||||||
|
|
|
@ -469,7 +469,7 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
|
||||||
u32 size, unsigned int irq,
|
u32 size, unsigned int irq,
|
||||||
s16 bus_num)
|
s16 bus_num)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct mpc512x_psc_spi *mps;
|
struct mpc512x_psc_spi *mps;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -366,7 +366,7 @@ static irqreturn_t mpc52xx_psc_spi_isr(int irq, void *dev_id)
|
||||||
static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
|
static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
|
||||||
u32 size, unsigned int irq, s16 bus_num)
|
u32 size, unsigned int irq, s16 bus_num)
|
||||||
{
|
{
|
||||||
struct fsl_spi_platform_data *pdata = dev->platform_data;
|
struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
|
||||||
struct mpc52xx_psc_spi *mps;
|
struct mpc52xx_psc_spi *mps;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -350,7 +350,7 @@ static int nuc900_spi_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
hw = spi_master_get_devdata(master);
|
hw = spi_master_get_devdata(master);
|
||||||
hw->master = spi_master_get(master);
|
hw->master = spi_master_get(master);
|
||||||
hw->pdata = pdev->dev.platform_data;
|
hw->pdata = dev_get_platdata(&pdev->dev);
|
||||||
hw->dev = &pdev->dev;
|
hw->dev = &pdev->dev;
|
||||||
|
|
||||||
if (hw->pdata == NULL) {
|
if (hw->pdata == NULL) {
|
||||||
|
|
|
@ -285,7 +285,7 @@ static int tiny_spi_of_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
static int tiny_spi_probe(struct platform_device *pdev)
|
static int tiny_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct tiny_spi_platform_data *platp = pdev->dev.platform_data;
|
struct tiny_spi_platform_data *platp = dev_get_platdata(&pdev->dev);
|
||||||
struct tiny_spi *hw;
|
struct tiny_spi *hw;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
|
|
@ -441,7 +441,7 @@ static int omap1_spi100k_probe(struct platform_device *pdev)
|
||||||
* You should allocate this with ioremap() before initializing
|
* You should allocate this with ioremap() before initializing
|
||||||
* the SPI.
|
* the SPI.
|
||||||
*/
|
*/
|
||||||
spi100k->base = (void __iomem *) pdev->dev.platform_data;
|
spi100k->base = (void __iomem *)dev_get_platdata(&pdev->dev);
|
||||||
|
|
||||||
spi100k->ick = devm_clk_get(&pdev->dev, "ick");
|
spi100k->ick = devm_clk_get(&pdev->dev, "ick");
|
||||||
if (IS_ERR(spi100k->ick)) {
|
if (IS_ERR(spi100k->ick)) {
|
||||||
|
|
|
@ -1340,7 +1340,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
|
||||||
if (of_get_property(node, "ti,pindir-d0-out-d1-in", NULL))
|
if (of_get_property(node, "ti,pindir-d0-out-d1-in", NULL))
|
||||||
mcspi->pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN;
|
mcspi->pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN;
|
||||||
} else {
|
} else {
|
||||||
pdata = pdev->dev.platform_data;
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
master->num_chipselect = pdata->num_cs;
|
master->num_chipselect = pdata->num_cs;
|
||||||
if (pdev->id != -1)
|
if (pdev->id != -1)
|
||||||
master->bus_num = pdev->id;
|
master->bus_num = pdev->id;
|
||||||
|
|
|
@ -2091,7 +2091,8 @@ pl022_platform_data_dt_get(struct device *dev)
|
||||||
static int pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
static int pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
||||||
{
|
{
|
||||||
struct device *dev = &adev->dev;
|
struct device *dev = &adev->dev;
|
||||||
struct pl022_ssp_controller *platform_info = adev->dev.platform_data;
|
struct pl022_ssp_controller *platform_info =
|
||||||
|
dev_get_platdata(&adev->dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct pl022 *pl022 = NULL; /*Data for this driver */
|
struct pl022 *pl022 = NULL; /*Data for this driver */
|
||||||
struct device_node *np = adev->dev.of_node;
|
struct device_node *np = adev->dev.of_node;
|
||||||
|
|
|
@ -564,8 +564,12 @@ static void rspi_work(struct work_struct *work)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
spin_lock_irqsave(&rspi->lock, flags);
|
while (1) {
|
||||||
while (!list_empty(&rspi->queue)) {
|
spin_lock_irqsave(&rspi->lock, flags);
|
||||||
|
if (list_empty(&rspi->queue)) {
|
||||||
|
spin_unlock_irqrestore(&rspi->lock, flags);
|
||||||
|
break;
|
||||||
|
}
|
||||||
mesg = list_entry(rspi->queue.next, struct spi_message, queue);
|
mesg = list_entry(rspi->queue.next, struct spi_message, queue);
|
||||||
list_del_init(&mesg->queue);
|
list_del_init(&mesg->queue);
|
||||||
spin_unlock_irqrestore(&rspi->lock, flags);
|
spin_unlock_irqrestore(&rspi->lock, flags);
|
||||||
|
@ -595,8 +599,6 @@ static void rspi_work(struct work_struct *work)
|
||||||
|
|
||||||
mesg->status = 0;
|
mesg->status = 0;
|
||||||
mesg->complete(mesg->context);
|
mesg->complete(mesg->context);
|
||||||
|
|
||||||
spin_lock_irqsave(&rspi->lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -664,12 +666,13 @@ static irqreturn_t rspi_irq(int irq, void *_sr)
|
||||||
static int rspi_request_dma(struct rspi_data *rspi,
|
static int rspi_request_dma(struct rspi_data *rspi,
|
||||||
struct platform_device *pdev)
|
struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rspi_plat_data *rspi_pd = pdev->dev.platform_data;
|
struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev);
|
||||||
|
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
dma_cap_mask_t mask;
|
dma_cap_mask_t mask;
|
||||||
struct dma_slave_config cfg;
|
struct dma_slave_config cfg;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!rspi_pd)
|
if (!res || !rspi_pd)
|
||||||
return 0; /* The driver assumes no error. */
|
return 0; /* The driver assumes no error. */
|
||||||
|
|
||||||
rspi->dma_width_16bit = rspi_pd->dma_width_16bit;
|
rspi->dma_width_16bit = rspi_pd->dma_width_16bit;
|
||||||
|
@ -683,6 +686,8 @@ static int rspi_request_dma(struct rspi_data *rspi,
|
||||||
if (rspi->chan_rx) {
|
if (rspi->chan_rx) {
|
||||||
cfg.slave_id = rspi_pd->dma_rx_id;
|
cfg.slave_id = rspi_pd->dma_rx_id;
|
||||||
cfg.direction = DMA_DEV_TO_MEM;
|
cfg.direction = DMA_DEV_TO_MEM;
|
||||||
|
cfg.dst_addr = 0;
|
||||||
|
cfg.src_addr = res->start + RSPI_SPDR;
|
||||||
ret = dmaengine_slave_config(rspi->chan_rx, &cfg);
|
ret = dmaengine_slave_config(rspi->chan_rx, &cfg);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
dev_info(&pdev->dev, "Use DMA when rx.\n");
|
dev_info(&pdev->dev, "Use DMA when rx.\n");
|
||||||
|
@ -698,6 +703,8 @@ static int rspi_request_dma(struct rspi_data *rspi,
|
||||||
if (rspi->chan_tx) {
|
if (rspi->chan_tx) {
|
||||||
cfg.slave_id = rspi_pd->dma_tx_id;
|
cfg.slave_id = rspi_pd->dma_tx_id;
|
||||||
cfg.direction = DMA_MEM_TO_DEV;
|
cfg.direction = DMA_MEM_TO_DEV;
|
||||||
|
cfg.dst_addr = res->start + RSPI_SPDR;
|
||||||
|
cfg.src_addr = 0;
|
||||||
ret = dmaengine_slave_config(rspi->chan_tx, &cfg);
|
ret = dmaengine_slave_config(rspi->chan_tx, &cfg);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
dev_info(&pdev->dev, "Use DMA when tx\n");
|
dev_info(&pdev->dev, "Use DMA when tx\n");
|
||||||
|
|
|
@ -525,7 +525,7 @@ static int s3c24xx_spi_probe(struct platform_device *pdev)
|
||||||
memset(hw, 0, sizeof(struct s3c24xx_spi));
|
memset(hw, 0, sizeof(struct s3c24xx_spi));
|
||||||
|
|
||||||
hw->master = spi_master_get(master);
|
hw->master = spi_master_get(master);
|
||||||
hw->pdata = pdata = pdev->dev.platform_data;
|
hw->pdata = pdata = dev_get_platdata(&pdev->dev);
|
||||||
hw->dev = &pdev->dev;
|
hw->dev = &pdev->dev;
|
||||||
|
|
||||||
if (pdata == NULL) {
|
if (pdata == NULL) {
|
||||||
|
@ -690,7 +690,7 @@ static int s3c24xx_spi_remove(struct platform_device *dev)
|
||||||
|
|
||||||
static int s3c24xx_spi_suspend(struct device *dev)
|
static int s3c24xx_spi_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct s3c24xx_spi *hw = platform_get_drvdata(to_platform_device(dev));
|
struct s3c24xx_spi *hw = dev_get_drvdata(dev);
|
||||||
|
|
||||||
if (hw->pdata && hw->pdata->gpio_setup)
|
if (hw->pdata && hw->pdata->gpio_setup)
|
||||||
hw->pdata->gpio_setup(hw->pdata, 0);
|
hw->pdata->gpio_setup(hw->pdata, 0);
|
||||||
|
@ -701,7 +701,7 @@ static int s3c24xx_spi_suspend(struct device *dev)
|
||||||
|
|
||||||
static int s3c24xx_spi_resume(struct device *dev)
|
static int s3c24xx_spi_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct s3c24xx_spi *hw = platform_get_drvdata(to_platform_device(dev));
|
struct s3c24xx_spi *hw = dev_get_drvdata(dev);
|
||||||
|
|
||||||
s3c24xx_spi_initialsetup(hw);
|
s3c24xx_spi_initialsetup(hw);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1275,7 +1275,7 @@ static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev)
|
||||||
#else
|
#else
|
||||||
static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev)
|
static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev)
|
||||||
{
|
{
|
||||||
return dev->platform_data;
|
return dev_get_platdata(dev);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1300,7 +1300,7 @@ static int s3c64xx_spi_probe(struct platform_device *pdev)
|
||||||
struct resource *mem_res;
|
struct resource *mem_res;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct s3c64xx_spi_driver_data *sdd;
|
struct s3c64xx_spi_driver_data *sdd;
|
||||||
struct s3c64xx_spi_info *sci = pdev->dev.platform_data;
|
struct s3c64xx_spi_info *sci = dev_get_platdata(&pdev->dev);
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
int ret, irq;
|
int ret, irq;
|
||||||
char clk_name[16];
|
char clk_name[16];
|
||||||
|
|
|
@ -645,7 +645,7 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
|
||||||
if (pdev->dev.of_node)
|
if (pdev->dev.of_node)
|
||||||
p->info = sh_msiof_spi_parse_dt(&pdev->dev);
|
p->info = sh_msiof_spi_parse_dt(&pdev->dev);
|
||||||
else
|
else
|
||||||
p->info = pdev->dev.platform_data;
|
p->info = dev_get_platdata(&pdev->dev);
|
||||||
|
|
||||||
if (!p->info) {
|
if (!p->info) {
|
||||||
dev_err(&pdev->dev, "failed to obtain device info\n");
|
dev_err(&pdev->dev, "failed to obtain device info\n");
|
||||||
|
|
|
@ -130,7 +130,7 @@ static int sh_sci_spi_probe(struct platform_device *dev)
|
||||||
sp = spi_master_get_devdata(master);
|
sp = spi_master_get_devdata(master);
|
||||||
|
|
||||||
platform_set_drvdata(dev, sp);
|
platform_set_drvdata(dev, sp);
|
||||||
sp->info = dev->dev.platform_data;
|
sp->info = dev_get_platdata(&dev->dev);
|
||||||
|
|
||||||
/* setup spi bitbang adaptor */
|
/* setup spi bitbang adaptor */
|
||||||
sp->bitbang.master = spi_master_get(master);
|
sp->bitbang.master = spi_master_get(master);
|
||||||
|
|
|
@ -599,8 +599,7 @@ static int spi_sirfsoc_remove(struct platform_device *pdev)
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static int spi_sirfsoc_suspend(struct device *dev)
|
static int spi_sirfsoc_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(dev);
|
struct spi_master *master = dev_get_drvdata(dev);
|
||||||
struct spi_master *master = platform_get_drvdata(pdev);
|
|
||||||
struct sirfsoc_spi *sspi = spi_master_get_devdata(master);
|
struct sirfsoc_spi *sspi = spi_master_get_devdata(master);
|
||||||
|
|
||||||
clk_disable(sspi->clk);
|
clk_disable(sspi->clk);
|
||||||
|
@ -609,8 +608,7 @@ static int spi_sirfsoc_suspend(struct device *dev)
|
||||||
|
|
||||||
static int spi_sirfsoc_resume(struct device *dev)
|
static int spi_sirfsoc_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(dev);
|
struct spi_master *master = dev_get_drvdata(dev);
|
||||||
struct spi_master *master = platform_get_drvdata(pdev);
|
|
||||||
struct sirfsoc_spi *sspi = spi_master_get_devdata(master);
|
struct sirfsoc_spi *sspi = spi_master_get_devdata(master);
|
||||||
|
|
||||||
clk_enable(sspi->clk);
|
clk_enable(sspi->clk);
|
||||||
|
|
|
@ -283,7 +283,7 @@ static int ti_ssp_spi_probe(struct platform_device *pdev)
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
pdata = dev->platform_data;
|
pdata = dev_get_platdata(dev);
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
dev_err(dev, "platform data not found\n");
|
dev_err(dev, "platform data not found\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -247,7 +247,7 @@ static int tle62x0_probe(struct spi_device *spi)
|
||||||
int ptr;
|
int ptr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pdata = spi->dev.platform_data;
|
pdata = dev_get_platdata(&spi->dev);
|
||||||
if (pdata == NULL) {
|
if (pdata == NULL) {
|
||||||
dev_err(&spi->dev, "no device data specified\n");
|
dev_err(&spi->dev, "no device data specified\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -80,10 +80,9 @@ struct xilinx_spi {
|
||||||
/* bitbang has to be first */
|
/* bitbang has to be first */
|
||||||
struct spi_bitbang bitbang;
|
struct spi_bitbang bitbang;
|
||||||
struct completion done;
|
struct completion done;
|
||||||
struct resource mem; /* phys mem */
|
|
||||||
void __iomem *regs; /* virt. address of the control registers */
|
void __iomem *regs; /* virt. address of the control registers */
|
||||||
|
|
||||||
u32 irq;
|
int irq;
|
||||||
|
|
||||||
u8 *rx_ptr; /* pointer in the Tx buffer */
|
u8 *rx_ptr; /* pointer in the Tx buffer */
|
||||||
const u8 *tx_ptr; /* pointer in the Rx buffer */
|
const u8 *tx_ptr; /* pointer in the Rx buffer */
|
||||||
|
@ -340,17 +339,34 @@ static const struct of_device_id xilinx_spi_of_match[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, xilinx_spi_of_match);
|
MODULE_DEVICE_TABLE(of, xilinx_spi_of_match);
|
||||||
|
|
||||||
struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
|
static int xilinx_spi_probe(struct platform_device *pdev)
|
||||||
u32 irq, s16 bus_num, int num_cs, int bits_per_word)
|
|
||||||
{
|
{
|
||||||
struct spi_master *master;
|
|
||||||
struct xilinx_spi *xspi;
|
struct xilinx_spi *xspi;
|
||||||
int ret;
|
struct xspi_platform_data *pdata;
|
||||||
|
struct resource *res;
|
||||||
|
int ret, num_cs = 0, bits_per_word = 8;
|
||||||
|
struct spi_master *master;
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
u8 i;
|
||||||
|
|
||||||
master = spi_alloc_master(dev, sizeof(struct xilinx_spi));
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
|
if (pdata) {
|
||||||
|
num_cs = pdata->num_chipselect;
|
||||||
|
bits_per_word = pdata->bits_per_word;
|
||||||
|
} else {
|
||||||
|
of_property_read_u32(pdev->dev.of_node, "xlnx,num-ss-bits",
|
||||||
|
&num_cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!num_cs) {
|
||||||
|
dev_err(&pdev->dev,
|
||||||
|
"Missing slave select configuration data\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
master = spi_alloc_master(&pdev->dev, sizeof(struct xilinx_spi));
|
||||||
if (!master)
|
if (!master)
|
||||||
return NULL;
|
return -ENODEV;
|
||||||
|
|
||||||
/* the spi->mode bits understood by this driver: */
|
/* the spi->mode bits understood by this driver: */
|
||||||
master->mode_bits = SPI_CPOL | SPI_CPHA;
|
master->mode_bits = SPI_CPOL | SPI_CPHA;
|
||||||
|
@ -362,22 +378,16 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
|
||||||
xspi->bitbang.txrx_bufs = xilinx_spi_txrx_bufs;
|
xspi->bitbang.txrx_bufs = xilinx_spi_txrx_bufs;
|
||||||
init_completion(&xspi->done);
|
init_completion(&xspi->done);
|
||||||
|
|
||||||
if (!request_mem_region(mem->start, resource_size(mem),
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
XILINX_SPI_NAME))
|
xspi->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||||
|
if (IS_ERR(xspi->regs)) {
|
||||||
|
ret = PTR_ERR(xspi->regs);
|
||||||
goto put_master;
|
goto put_master;
|
||||||
|
|
||||||
xspi->regs = ioremap(mem->start, resource_size(mem));
|
|
||||||
if (xspi->regs == NULL) {
|
|
||||||
dev_warn(dev, "ioremap failure\n");
|
|
||||||
goto map_failed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
master->bus_num = bus_num;
|
master->bus_num = pdev->dev.id;
|
||||||
master->num_chipselect = num_cs;
|
master->num_chipselect = num_cs;
|
||||||
master->dev.of_node = dev->of_node;
|
master->dev.of_node = pdev->dev.of_node;
|
||||||
|
|
||||||
xspi->mem = *mem;
|
|
||||||
xspi->irq = irq;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Detect endianess on the IP via loop bit in CR. Detection
|
* Detect endianess on the IP via loop bit in CR. Detection
|
||||||
|
@ -407,113 +417,63 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
|
||||||
} else if (xspi->bits_per_word == 32) {
|
} else if (xspi->bits_per_word == 32) {
|
||||||
xspi->tx_fn = xspi_tx32;
|
xspi->tx_fn = xspi_tx32;
|
||||||
xspi->rx_fn = xspi_rx32;
|
xspi->rx_fn = xspi_rx32;
|
||||||
} else
|
} else {
|
||||||
goto unmap_io;
|
ret = -EINVAL;
|
||||||
|
goto put_master;
|
||||||
|
}
|
||||||
|
|
||||||
/* SPI controller initializations */
|
/* SPI controller initializations */
|
||||||
xspi_init_hw(xspi);
|
xspi_init_hw(xspi);
|
||||||
|
|
||||||
|
xspi->irq = platform_get_irq(pdev, 0);
|
||||||
|
if (xspi->irq < 0) {
|
||||||
|
ret = xspi->irq;
|
||||||
|
goto put_master;
|
||||||
|
}
|
||||||
|
|
||||||
/* Register for SPI Interrupt */
|
/* Register for SPI Interrupt */
|
||||||
ret = request_irq(xspi->irq, xilinx_spi_irq, 0, XILINX_SPI_NAME, xspi);
|
ret = devm_request_irq(&pdev->dev, xspi->irq, xilinx_spi_irq, 0,
|
||||||
|
dev_name(&pdev->dev), xspi);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unmap_io;
|
goto put_master;
|
||||||
|
|
||||||
ret = spi_bitbang_start(&xspi->bitbang);
|
ret = spi_bitbang_start(&xspi->bitbang);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "spi_bitbang_start FAILED\n");
|
dev_err(&pdev->dev, "spi_bitbang_start FAILED\n");
|
||||||
goto free_irq;
|
goto put_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info(dev, "at 0x%08llX mapped to 0x%p, irq=%d\n",
|
dev_info(&pdev->dev, "at 0x%08llX mapped to 0x%p, irq=%d\n",
|
||||||
(unsigned long long)mem->start, xspi->regs, xspi->irq);
|
(unsigned long long)res->start, xspi->regs, xspi->irq);
|
||||||
return master;
|
|
||||||
|
|
||||||
free_irq:
|
|
||||||
free_irq(xspi->irq, xspi);
|
|
||||||
unmap_io:
|
|
||||||
iounmap(xspi->regs);
|
|
||||||
map_failed:
|
|
||||||
release_mem_region(mem->start, resource_size(mem));
|
|
||||||
put_master:
|
|
||||||
spi_master_put(master);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(xilinx_spi_init);
|
|
||||||
|
|
||||||
void xilinx_spi_deinit(struct spi_master *master)
|
|
||||||
{
|
|
||||||
struct xilinx_spi *xspi;
|
|
||||||
|
|
||||||
xspi = spi_master_get_devdata(master);
|
|
||||||
|
|
||||||
spi_bitbang_stop(&xspi->bitbang);
|
|
||||||
free_irq(xspi->irq, xspi);
|
|
||||||
iounmap(xspi->regs);
|
|
||||||
|
|
||||||
release_mem_region(xspi->mem.start, resource_size(&xspi->mem));
|
|
||||||
spi_master_put(xspi->bitbang.master);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(xilinx_spi_deinit);
|
|
||||||
|
|
||||||
static int xilinx_spi_probe(struct platform_device *dev)
|
|
||||||
{
|
|
||||||
struct xspi_platform_data *pdata;
|
|
||||||
struct resource *r;
|
|
||||||
int irq, num_cs = 0, bits_per_word = 8;
|
|
||||||
struct spi_master *master;
|
|
||||||
u8 i;
|
|
||||||
|
|
||||||
pdata = dev->dev.platform_data;
|
|
||||||
if (pdata) {
|
|
||||||
num_cs = pdata->num_chipselect;
|
|
||||||
bits_per_word = pdata->bits_per_word;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
|
||||||
if (dev->dev.of_node) {
|
|
||||||
const __be32 *prop;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
/* number of slave select bits is required */
|
|
||||||
prop = of_get_property(dev->dev.of_node, "xlnx,num-ss-bits",
|
|
||||||
&len);
|
|
||||||
if (prop && len >= sizeof(*prop))
|
|
||||||
num_cs = __be32_to_cpup(prop);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!num_cs) {
|
|
||||||
dev_err(&dev->dev, "Missing slave select configuration data\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
r = platform_get_resource(dev, IORESOURCE_MEM, 0);
|
|
||||||
if (!r)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
irq = platform_get_irq(dev, 0);
|
|
||||||
if (irq < 0)
|
|
||||||
return -ENXIO;
|
|
||||||
|
|
||||||
master = xilinx_spi_init(&dev->dev, r, irq, dev->id, num_cs,
|
|
||||||
bits_per_word);
|
|
||||||
if (!master)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
if (pdata) {
|
if (pdata) {
|
||||||
for (i = 0; i < pdata->num_devices; i++)
|
for (i = 0; i < pdata->num_devices; i++)
|
||||||
spi_new_device(master, pdata->devices + i);
|
spi_new_device(master, pdata->devices + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(dev, master);
|
platform_set_drvdata(pdev, master);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
put_master:
|
||||||
|
spi_master_put(master);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xilinx_spi_remove(struct platform_device *dev)
|
static int xilinx_spi_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
xilinx_spi_deinit(platform_get_drvdata(dev));
|
struct spi_master *master = platform_get_drvdata(pdev);
|
||||||
|
struct xilinx_spi *xspi = spi_master_get_devdata(master);
|
||||||
|
void __iomem *regs_base = xspi->regs;
|
||||||
|
|
||||||
|
spi_bitbang_stop(&xspi->bitbang);
|
||||||
|
|
||||||
|
/* Disable all the interrupts just in case */
|
||||||
|
xspi->write_fn(0, regs_base + XIPIF_V123B_IIER_OFFSET);
|
||||||
|
/* Disable the global IPIF interrupt */
|
||||||
|
xspi->write_fn(0, regs_base + XIPIF_V123B_DGIER_OFFSET);
|
||||||
|
|
||||||
|
spi_master_put(xspi->bitbang.master);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue