mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (35 commits) powerpc/5121: make clock debug output more readable powerpc/5xxx: Add common mpc5xxx_get_bus_frequency() function powerpc/5200: Update pcm030.dts to add i2c eeprom and delete cruft powerpc/5200: convert mpc52xx_psc_spi to use cs_control callback fbdev/xilinxfb: Fix improper casting and tighen up probe path usb/ps3: Add missing annotations powerpc: Add memory clobber to mtspr() powerpc: Fix invalid construct in our CPU selection Kconfig ps3rom: Use ps3_system_bus_[gs]et_drvdata() instead of direct access powerpc: Add configurable -Werror for arch/powerpc of_serial: Add UPF_FIXED_TYPE flag drivers/hvc: Add missing __devexit_p() net/ps3: gelic - Add missing annotations powerpc: Introduce macro spin_event_timeout() powerpc/warp: Fix ISA_DMA_THRESHOLD default powerpc/bootwrapper: Custom build options for XPedite52xx targets powerpc/85xx: Add defconfig for X-ES MPC85xx boards powerpc/85xx: Add dts files for X-ES MPC85xx boards powerpc/85xx: Add platform support for X-ES MPC85xx boards 83xx: add support for the kmeter1 board. ...
This commit is contained in:
commit
773d7a09e1
82 changed files with 7907 additions and 216 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue