mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	Merge commit 'gcl/merge' into next
Manual merge of: drivers/net/fec_mpc52xx.c
This commit is contained in:
		
						commit
						b71a107c66
					
				
					 18 changed files with 91 additions and 149 deletions
				
			
		| 
						 | 
				
			
			@ -258,34 +258,16 @@
 | 
			
		|||
				compatible = "nxp,pcf8563";
 | 
			
		||||
				reg = <0x51>;
 | 
			
		||||
			};
 | 
			
		||||
			/* FIXME: EEPROM */
 | 
			
		||||
			eeprom@52 {
 | 
			
		||||
				compatible = "catalyst,24c32";
 | 
			
		||||
				reg = <0x52>;
 | 
			
		||||
			};
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		sram@8000 {
 | 
			
		||||
			compatible = "fsl,mpc5200b-sram","fsl,mpc5200-sram";
 | 
			
		||||
			reg = <0x8000 0x4000>;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		/* This is only an example device to show the usage of gpios. It maps all available
 | 
			
		||||
		 * gpios to the "gpio-provider" device.
 | 
			
		||||
		 */
 | 
			
		||||
		gpio {
 | 
			
		||||
			compatible = "gpio-provider";
 | 
			
		||||
 | 
			
		||||
						    /* mpc52xx		exp.con		patchfield */
 | 
			
		||||
			gpios = <&gpio_wkup	0 0 /* GPIO_WKUP_7	11d		jp13-3     */
 | 
			
		||||
				 &gpio_wkup	1 0 /* GPIO_WKUP_6	14c			   */
 | 
			
		||||
				 &gpio_wkup	6 0 /* PSC2_4		43c		x5-11	   */
 | 
			
		||||
				 &gpio_simple	2 0 /* IRDA_1		24c		x7-6	set GPS_PORT_CONFIG[IRDA] = 0 */
 | 
			
		||||
				 &gpio_simple	3 0 /* IRDA_0				x8-5	set GPS_PORT_CONFIG[IRDA] = 0 */
 | 
			
		||||
				 &gpt2		0 0 /* timer2		12d		x4-4	   */
 | 
			
		||||
				 &gpt3		0 0 /* timer3		13d		x6-4	   */
 | 
			
		||||
				 &gpt4		0 0 /* timer4		61c		x2-16	   */
 | 
			
		||||
				 &gpt5		0 0 /* timer5		44c		x7-11	   */
 | 
			
		||||
				 &gpt6		0 0 /* timer6		60c		x8-15	   */
 | 
			
		||||
				 &gpt7		0 0 /* timer7		36a		x17-9	   */
 | 
			
		||||
				 >;
 | 
			
		||||
		};
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	pci@f0000d00 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
#ifndef __ASSEMBLY__
 | 
			
		||||
#include <asm/types.h>
 | 
			
		||||
#include <asm/prom.h>
 | 
			
		||||
#include <asm/mpc5xxx.h>
 | 
			
		||||
#endif /* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#include <linux/suspend.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -268,7 +269,6 @@ struct mpc52xx_intr {
 | 
			
		|||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
/* mpc52xx_common.c */
 | 
			
		||||
extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node);
 | 
			
		||||
extern void mpc5200_setup_xlb_arbiter(void);
 | 
			
		||||
extern void mpc52xx_declare_of_platform_devices(void);
 | 
			
		||||
extern void mpc52xx_map_common_devices(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
 * Author: John Rigby, <jrigby@freescale.com>, Friday Apr 13 2007
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 * MPC5121 Prototypes and definitions
 | 
			
		||||
 * MPC5xxx Prototypes and definitions
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software; you can redistribute it and/or modify it
 | 
			
		||||
 * under the terms of the GNU General Public License as published by
 | 
			
		||||
| 
						 | 
				
			
			@ -13,10 +13,10 @@
 | 
			
		|||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __ASM_POWERPC_MPC512x_H__
 | 
			
		||||
#define __ASM_POWERPC_MPC512x_H__
 | 
			
		||||
#ifndef __ASM_POWERPC_MPC5xxx_H__
 | 
			
		||||
#define __ASM_POWERPC_MPC5xxx_H__
 | 
			
		||||
 | 
			
		||||
extern unsigned long mpc512x_find_ips_freq(struct device_node *node);
 | 
			
		||||
extern unsigned long mpc5xxx_get_bus_frequency(struct device_node *node);
 | 
			
		||||
 | 
			
		||||
#endif /* __ASM_POWERPC_MPC512x_H__ */
 | 
			
		||||
#endif /* __ASM_POWERPC_MPC5xxx_H__ */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +24,7 @@
 | 
			
		|||
#include <linux/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/of_platform.h>
 | 
			
		||||
#include <asm/mpc512x.h>
 | 
			
		||||
#include <asm/mpc5xxx.h>
 | 
			
		||||
#include <asm/clk_interface.h>
 | 
			
		||||
 | 
			
		||||
#undef CLK_DEBUG
 | 
			
		||||
| 
						 | 
				
			
			@ -83,13 +83,13 @@ static void dump_clocks(void)
 | 
			
		|||
	mutex_lock(&clocks_mutex);
 | 
			
		||||
	printk(KERN_INFO "CLOCKS:\n");
 | 
			
		||||
	list_for_each_entry(p, &clocks, node) {
 | 
			
		||||
		printk(KERN_INFO "  %s %ld", p->name, p->rate);
 | 
			
		||||
		pr_info("  %s=%ld", p->name, p->rate);
 | 
			
		||||
		if (p->parent)
 | 
			
		||||
			printk(KERN_INFO " %s %ld", p->parent->name,
 | 
			
		||||
			pr_cont(" %s=%ld", p->parent->name,
 | 
			
		||||
			       p->parent->rate);
 | 
			
		||||
		if (p->flags & CLK_HAS_CTRL)
 | 
			
		||||
			printk(KERN_INFO " reg/bit %d/%d", p->reg, p->bit);
 | 
			
		||||
		printk("\n");
 | 
			
		||||
			pr_cont(" reg/bit=%d/%d", p->reg, p->bit);
 | 
			
		||||
		pr_cont("\n");
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&clocks_mutex);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@
 | 
			
		|||
 | 
			
		||||
#ifndef __MPC512X_H__
 | 
			
		||||
#define __MPC512X_H__
 | 
			
		||||
extern unsigned long mpc512x_find_ips_freq(struct device_node *node);
 | 
			
		||||
extern void __init mpc512x_init_IRQ(void);
 | 
			
		||||
void __init mpc512x_declare_of_platform_devices(void);
 | 
			
		||||
#endif				/* __MPC512X_H__ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,29 +24,6 @@
 | 
			
		|||
 | 
			
		||||
#include "mpc512x.h"
 | 
			
		||||
 | 
			
		||||
unsigned long
 | 
			
		||||
mpc512x_find_ips_freq(struct device_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np;
 | 
			
		||||
	const unsigned int *p_ips_freq = NULL;
 | 
			
		||||
 | 
			
		||||
	of_node_get(node);
 | 
			
		||||
	while (node) {
 | 
			
		||||
		p_ips_freq = of_get_property(node, "bus-frequency", NULL);
 | 
			
		||||
		if (p_ips_freq)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		np = of_get_parent(node);
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
		node = np;
 | 
			
		||||
	}
 | 
			
		||||
	if (node)
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
 | 
			
		||||
	return p_ips_freq ? *p_ips_freq : 0;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(mpc512x_find_ips_freq);
 | 
			
		||||
 | 
			
		||||
void __init mpc512x_init_IRQ(void)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,36 +47,6 @@ static DEFINE_SPINLOCK(mpc52xx_lock);
 | 
			
		|||
static struct mpc52xx_gpt __iomem *mpc52xx_wdt;
 | 
			
		||||
static struct mpc52xx_cdm __iomem *mpc52xx_cdm;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 	mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device
 | 
			
		||||
 * 	@node:	device node
 | 
			
		||||
 *
 | 
			
		||||
 * 	Returns IPB bus frequency, or 0 if the bus frequency cannot be found.
 | 
			
		||||
 */
 | 
			
		||||
unsigned int
 | 
			
		||||
mpc52xx_find_ipb_freq(struct device_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np;
 | 
			
		||||
	const unsigned int *p_ipb_freq = NULL;
 | 
			
		||||
 | 
			
		||||
	of_node_get(node);
 | 
			
		||||
	while (node) {
 | 
			
		||||
		p_ipb_freq = of_get_property(node, "bus-frequency", NULL);
 | 
			
		||||
		if (p_ipb_freq)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		np = of_get_parent(node);
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
		node = np;
 | 
			
		||||
	}
 | 
			
		||||
	if (node)
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
 | 
			
		||||
	return p_ipb_freq ? *p_ipb_freq : 0;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(mpc52xx_find_ipb_freq);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Configure the XLB arbiter settings to match what Linux expects.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +191,7 @@ unsigned int mpc52xx_get_xtal_freq(struct device_node *node)
 | 
			
		|||
	if (!mpc52xx_cdm)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	freq = mpc52xx_find_ipb_freq(node);
 | 
			
		||||
	freq = mpc5xxx_get_bus_frequency(node);
 | 
			
		||||
	if (!freq)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,6 +50,9 @@ obj-$(CONFIG_PPC_DCR)		+= dcr.o
 | 
			
		|||
obj-$(CONFIG_8xx)		+= mpc8xx_pic.o cpm1.o
 | 
			
		||||
obj-$(CONFIG_UCODE_PATCH)	+= micropatch.o
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_PPC_MPC512x)	+= mpc5xxx_clocks.o
 | 
			
		||||
obj-$(CONFIG_PPC_MPC52xx)	+= mpc5xxx_clocks.o
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_SUSPEND),y)
 | 
			
		||||
obj-$(CONFIG_6xx)		+= 6xx-suspend.o
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								arch/powerpc/sysdev/mpc5xxx_clocks.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								arch/powerpc/sysdev/mpc5xxx_clocks.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
/**
 | 
			
		||||
 * 	mpc5xxx_get_bus_frequency - Find the bus frequency for a device
 | 
			
		||||
 * 	@node:	device node
 | 
			
		||||
 *
 | 
			
		||||
 * 	Returns bus frequency (IPS on MPC512x, IPB on MPC52xx),
 | 
			
		||||
 * 	or 0 if the bus frequency cannot be found.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/of_platform.h>
 | 
			
		||||
 | 
			
		||||
unsigned int
 | 
			
		||||
mpc5xxx_get_bus_frequency(struct device_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct device_node *np;
 | 
			
		||||
	const unsigned int *p_bus_freq = NULL;
 | 
			
		||||
 | 
			
		||||
	of_node_get(node);
 | 
			
		||||
	while (node) {
 | 
			
		||||
		p_bus_freq = of_get_property(node, "bus-frequency", NULL);
 | 
			
		||||
		if (p_bus_freq)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		np = of_get_parent(node);
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
		node = np;
 | 
			
		||||
	}
 | 
			
		||||
	if (node)
 | 
			
		||||
		of_node_put(node);
 | 
			
		||||
 | 
			
		||||
	return p_bus_freq ? *p_bus_freq : 0;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(mpc5xxx_get_bus_frequency);
 | 
			
		||||
| 
						 | 
				
			
			@ -694,7 +694,7 @@ mpc52xx_ata_probe(struct of_device *op, const struct of_device_id *match)
 | 
			
		|||
	struct bcom_task *dmatsk = NULL;
 | 
			
		||||
 | 
			
		||||
	/* Get ipb frequency */
 | 
			
		||||
	ipb_freq = mpc52xx_find_ipb_freq(op->node);
 | 
			
		||||
	ipb_freq = mpc5xxx_get_bus_frequency(op->node);
 | 
			
		||||
	if (!ipb_freq) {
 | 
			
		||||
		dev_err(&op->dev, "could not determine IPB bus frequency\n");
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -197,7 +197,7 @@ int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, int prescaler)
 | 
			
		|||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	/* Determine divider value */
 | 
			
		||||
	divider = mpc52xx_find_ipb_freq(node) / clock;
 | 
			
		||||
	divider = mpc5xxx_get_bus_frequency(node) / clock;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We want to choose an FDR/DFSR that generates an I2C bus speed that
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -948,7 +948,7 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
 | 
			
		|||
	/* Start with safe defaults for link connection */
 | 
			
		||||
	priv->speed = 100;
 | 
			
		||||
	priv->duplex = DUPLEX_HALF;
 | 
			
		||||
	priv->mdio_speed = ((mpc52xx_find_ipb_freq(op->node) >> 20) / 5) << 1;
 | 
			
		||||
	priv->mdio_speed = ((mpc5xxx_get_bus_frequency(op->node) >> 20) / 5) << 1;
 | 
			
		||||
 | 
			
		||||
	/* The current speed preconfigures the speed of the MII link */
 | 
			
		||||
	prop = of_get_property(op->node, "current-speed", &prop_size);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ static int mpc52xx_fec_mdio_probe(struct of_device *of,
 | 
			
		|||
 | 
			
		||||
	/* set MII speed */
 | 
			
		||||
	out_be32(&priv->regs->mii_speed,
 | 
			
		||||
		((mpc52xx_find_ipb_freq(of->node) >> 20) / 5) << 1);
 | 
			
		||||
		((mpc5xxx_get_bus_frequency(of->node) >> 20) / 5) << 1);
 | 
			
		||||
 | 
			
		||||
	err = of_mdiobus_register(bus, np);
 | 
			
		||||
	if (err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,7 +76,6 @@
 | 
			
		|||
#include <linux/of_platform.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/mpc52xx.h>
 | 
			
		||||
#include <asm/mpc512x.h>
 | 
			
		||||
#include <asm/mpc52xx_psc.h>
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_SERIAL_MPC52xx_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
 | 
			
		||||
| 
						 | 
				
			
			@ -254,7 +253,7 @@ static unsigned long mpc52xx_getuartclk(void *p)
 | 
			
		|||
	 * but the generic serial code assumes 16
 | 
			
		||||
	 * so return ipb freq / 2
 | 
			
		||||
	 */
 | 
			
		||||
	return mpc52xx_find_ipb_freq(p) / 2;
 | 
			
		||||
	return mpc5xxx_get_bus_frequency(p) / 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct psc_ops mpc52xx_psc_ops = {
 | 
			
		||||
| 
						 | 
				
			
			@ -391,7 +390,7 @@ static void mpc512x_psc_cw_restore_ints(struct uart_port *port)
 | 
			
		|||
 | 
			
		||||
static unsigned long mpc512x_getuartclk(void *p)
 | 
			
		||||
{
 | 
			
		||||
	return mpc512x_find_ips_freq(p);
 | 
			
		||||
	return mpc5xxx_get_bus_frequency(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct psc_ops mpc512x_psc_ops = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@
 | 
			
		|||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/interrupt.h>
 | 
			
		||||
#include <linux/of_platform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -30,8 +31,7 @@
 | 
			
		|||
 | 
			
		||||
struct mpc52xx_psc_spi {
 | 
			
		||||
	/* fsl_spi_platform data */
 | 
			
		||||
	void (*activate_cs)(u8, u8);
 | 
			
		||||
	void (*deactivate_cs)(u8, u8);
 | 
			
		||||
	void (*cs_control)(struct spi_device *spi, bool on);
 | 
			
		||||
	u32 sysclk;
 | 
			
		||||
 | 
			
		||||
	/* driver internal data */
 | 
			
		||||
| 
						 | 
				
			
			@ -111,18 +111,16 @@ static void mpc52xx_psc_spi_activate_cs(struct spi_device *spi)
 | 
			
		|||
	out_be16((u16 __iomem *)&psc->ccr, ccr);
 | 
			
		||||
	mps->bits_per_word = cs->bits_per_word;
 | 
			
		||||
 | 
			
		||||
	if (mps->activate_cs)
 | 
			
		||||
		mps->activate_cs(spi->chip_select,
 | 
			
		||||
				(spi->mode & SPI_CS_HIGH) ? 1 : 0);
 | 
			
		||||
	if (mps->cs_control)
 | 
			
		||||
		mps->cs_control(spi, (spi->mode & SPI_CS_HIGH) ? 1 : 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void mpc52xx_psc_spi_deactivate_cs(struct spi_device *spi)
 | 
			
		||||
{
 | 
			
		||||
	struct mpc52xx_psc_spi *mps = spi_master_get_devdata(spi->master);
 | 
			
		||||
 | 
			
		||||
	if (mps->deactivate_cs)
 | 
			
		||||
		mps->deactivate_cs(spi->chip_select,
 | 
			
		||||
				(spi->mode & SPI_CS_HIGH) ? 1 : 0);
 | 
			
		||||
	if (mps->cs_control)
 | 
			
		||||
		mps->cs_control(spi, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define MPC52xx_PSC_BUFSIZE (MPC52xx_PSC_RFNUM_MASK + 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -388,15 +386,13 @@ static int __init mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
 | 
			
		|||
	mps->irq = irq;
 | 
			
		||||
	if (pdata == NULL) {
 | 
			
		||||
		dev_warn(dev, "probe called without platform data, no "
 | 
			
		||||
				"(de)activate_cs function will be called\n");
 | 
			
		||||
		mps->activate_cs = NULL;
 | 
			
		||||
		mps->deactivate_cs = NULL;
 | 
			
		||||
				"cs_control function will be called\n");
 | 
			
		||||
		mps->cs_control = NULL;
 | 
			
		||||
		mps->sysclk = 0;
 | 
			
		||||
		master->bus_num = bus_num;
 | 
			
		||||
		master->num_chipselect = 255;
 | 
			
		||||
	} else {
 | 
			
		||||
		mps->activate_cs = pdata->activate_cs;
 | 
			
		||||
		mps->deactivate_cs = pdata->deactivate_cs;
 | 
			
		||||
		mps->cs_control = pdata->cs_control;
 | 
			
		||||
		mps->sysclk = pdata->sysclk;
 | 
			
		||||
		master->bus_num = pdata->bus_num;
 | 
			
		||||
		master->num_chipselect = pdata->max_chipselect;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,7 +124,6 @@ struct xilinxfb_drvdata {
 | 
			
		|||
						registers */
 | 
			
		||||
 | 
			
		||||
	dcr_host_t      dcr_host;
 | 
			
		||||
	unsigned int    dcr_start;
 | 
			
		||||
	unsigned int    dcr_len;
 | 
			
		||||
 | 
			
		||||
	void		*fb_virt;	/* virt. address of the frame buffer */
 | 
			
		||||
| 
						 | 
				
			
			@ -325,8 +324,8 @@ static int xilinxfb_assign(struct device *dev,
 | 
			
		|||
					drvdata->regs);
 | 
			
		||||
	}
 | 
			
		||||
	/* Put a banner in the log (for DEBUG) */
 | 
			
		||||
	dev_dbg(dev, "fb: phys=%p, virt=%p, size=%x\n",
 | 
			
		||||
		(void *)drvdata->fb_phys, drvdata->fb_virt, fbsize);
 | 
			
		||||
	dev_dbg(dev, "fb: phys=%llx, virt=%p, size=%x\n",
 | 
			
		||||
		(unsigned long long)drvdata->fb_phys, drvdata->fb_virt, fbsize);
 | 
			
		||||
 | 
			
		||||
	return 0;	/* success */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -404,9 +403,7 @@ xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match)
 | 
			
		|||
	u32 tft_access;
 | 
			
		||||
	struct xilinxfb_platform_data pdata;
 | 
			
		||||
	struct resource res;
 | 
			
		||||
	int size, rc;
 | 
			
		||||
	int start = 0, len = 0;
 | 
			
		||||
	dcr_host_t dcr_host;
 | 
			
		||||
	int size, rc, start;
 | 
			
		||||
	struct xilinxfb_drvdata *drvdata;
 | 
			
		||||
 | 
			
		||||
	/* Copy with the default pdata (not a ptr reference!) */
 | 
			
		||||
| 
						 | 
				
			
			@ -414,35 +411,39 @@ xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match)
 | 
			
		|||
 | 
			
		||||
	dev_dbg(&op->dev, "xilinxfb_of_probe(%p, %p)\n", op, match);
 | 
			
		||||
 | 
			
		||||
	/* Allocate the driver data region */
 | 
			
		||||
	drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
 | 
			
		||||
	if (!drvdata) {
 | 
			
		||||
		dev_err(&op->dev, "Couldn't allocate device private record\n");
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * To check whether the core is connected directly to DCR or PLB
 | 
			
		||||
	 * interface and initialize the tft_access accordingly.
 | 
			
		||||
	 */
 | 
			
		||||
	p = (u32 *)of_get_property(op->node, "xlnx,dcr-splb-slave-if", NULL);
 | 
			
		||||
 | 
			
		||||
	if (p)
 | 
			
		||||
		tft_access = *p;
 | 
			
		||||
	else
 | 
			
		||||
		tft_access = 0;		/* For backward compatibility */
 | 
			
		||||
	tft_access = p ? *p : 0;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Fill the resource structure if its direct PLB interface
 | 
			
		||||
	 * otherwise fill the dcr_host structure.
 | 
			
		||||
	 */
 | 
			
		||||
	if (tft_access) {
 | 
			
		||||
		drvdata->flags |= PLB_ACCESS_FLAG;
 | 
			
		||||
		rc = of_address_to_resource(op->node, 0, &res);
 | 
			
		||||
		if (rc) {
 | 
			
		||||
			dev_err(&op->dev, "invalid address\n");
 | 
			
		||||
			return -ENODEV;
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	} else {
 | 
			
		||||
		res.start = 0;
 | 
			
		||||
		start = dcr_resource_start(op->node, 0);
 | 
			
		||||
		len = dcr_resource_len(op->node, 0);
 | 
			
		||||
		dcr_host = dcr_map(op->node, start, len);
 | 
			
		||||
		if (!DCR_MAP_OK(dcr_host)) {
 | 
			
		||||
			dev_err(&op->dev, "invalid address\n");
 | 
			
		||||
			return -ENODEV;
 | 
			
		||||
		drvdata->dcr_len = dcr_resource_len(op->node, 0);
 | 
			
		||||
		drvdata->dcr_host = dcr_map(op->node, start, drvdata->dcr_len);
 | 
			
		||||
		if (!DCR_MAP_OK(drvdata->dcr_host)) {
 | 
			
		||||
			dev_err(&op->dev, "invalid DCR address\n");
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -467,26 +468,12 @@ xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match)
 | 
			
		|||
	if (of_find_property(op->node, "rotate-display", NULL))
 | 
			
		||||
		pdata.rotate_screen = 1;
 | 
			
		||||
 | 
			
		||||
	/* Allocate the driver data region */
 | 
			
		||||
	drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
 | 
			
		||||
	if (!drvdata) {
 | 
			
		||||
		dev_err(&op->dev, "Couldn't allocate device private record\n");
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
	dev_set_drvdata(&op->dev, drvdata);
 | 
			
		||||
	return xilinxfb_assign(&op->dev, drvdata, res.start, &pdata);
 | 
			
		||||
 | 
			
		||||
	if (tft_access)
 | 
			
		||||
		drvdata->flags |= PLB_ACCESS_FLAG;
 | 
			
		||||
 | 
			
		||||
	/* Arguments are passed based on the interface */
 | 
			
		||||
	if (drvdata->flags & PLB_ACCESS_FLAG) {
 | 
			
		||||
		return xilinxfb_assign(&op->dev, drvdata, res.start, &pdata);
 | 
			
		||||
	} else {
 | 
			
		||||
		drvdata->dcr_start = start;
 | 
			
		||||
		drvdata->dcr_len = len;
 | 
			
		||||
		drvdata->dcr_host = dcr_host;
 | 
			
		||||
		return xilinxfb_assign(&op->dev, drvdata, 0, &pdata);
 | 
			
		||||
	}
 | 
			
		||||
 err:
 | 
			
		||||
	kfree(drvdata);
 | 
			
		||||
	return -ENODEV;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __devexit xilinxfb_of_remove(struct of_device *op)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ static int mpc5200_wdt_probe(struct of_device *op,
 | 
			
		|||
	if (!wdt)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	wdt->ipb_freq = mpc52xx_find_ipb_freq(op->node);
 | 
			
		||||
	wdt->ipb_freq = mpc5xxx_get_bus_frequency(op->node);
 | 
			
		||||
 | 
			
		||||
	err = of_address_to_resource(op->node, 0, &wdt->mem);
 | 
			
		||||
	if (err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,10 +79,6 @@ struct fsl_spi_platform_data {
 | 
			
		|||
	u16	max_chipselect;
 | 
			
		||||
	void	(*cs_control)(struct spi_device *spi, bool on);
 | 
			
		||||
	u32	sysclk;
 | 
			
		||||
 | 
			
		||||
	/* Legacy hooks, used by mpc52xx_psc_spi driver. */
 | 
			
		||||
	void	(*activate_cs)(u8 cs, u8 polarity);
 | 
			
		||||
	void	(*deactivate_cs)(u8 cs, u8 polarity);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct mpc8xx_pcmcia_ops {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue