mirror of
https://github.com/patjak/facetimehd.git
synced 2026-04-09 11:02:31 +02:00
isp: Load firmware and fix ISP boot
Yay it's booting!!! Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
This commit is contained in:
47
isp.c
47
isp.c
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/firmware.h>
|
||||
#include "bcwc_drv.h"
|
||||
#include "bcwc_hw.h"
|
||||
#include "bcwc_reg.h"
|
||||
@@ -62,12 +63,48 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int isp_enable_sensor(struct bcwc_private *dev_priv)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int isp_load_firmware(struct bcwc_private *dev_priv)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
int ret = 0;
|
||||
|
||||
ret = request_firmware(&fw, "fthd.bin", &dev_priv->pdev->dev);
|
||||
|
||||
if (fw == NULL)
|
||||
return ret;
|
||||
|
||||
memcpy(dev_priv->s2_mem, fw->data, fw->size);
|
||||
|
||||
dev_info(&dev_priv->pdev->dev, "Loaded firmware (size: %lukb)\n",
|
||||
fw->size / 1024);
|
||||
|
||||
release_firmware(fw);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int isp_init(struct bcwc_private *dev_priv)
|
||||
{
|
||||
u32 num_channels, queue_size;
|
||||
u32 reg;
|
||||
int i, retries;
|
||||
|
||||
isp_load_firmware(dev_priv);
|
||||
|
||||
isp_acpi_set_power(dev_priv, 1);
|
||||
mdelay(20);
|
||||
|
||||
/* OSX driver configures the PCI bus here but we ignore it */
|
||||
|
||||
pci_set_power_state(dev_priv->pdev, PCI_D0);
|
||||
|
||||
isp_enable_sensor(dev_priv);
|
||||
|
||||
BCWC_ISP_REG_WRITE(0, ISP_IPC_NUM_CHAN);
|
||||
bcwc_hw_pci_post(dev_priv);
|
||||
|
||||
@@ -112,10 +149,10 @@ int isp_init(struct bcwc_private *dev_priv)
|
||||
bcwc_hw_pci_post(dev_priv);
|
||||
|
||||
for (retries = 0; retries < 1000; retries++) {
|
||||
reg = BCWC_ISP_REG_READ(ISP_REG_40004);
|
||||
if ((reg & 0xff) == 0xf0)
|
||||
reg = BCWC_ISP_REG_READ(ISP_REG_41000);
|
||||
if ((reg & 0xf0) > 0)
|
||||
break;
|
||||
udelay(10);
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
if (retries >= 1000) {
|
||||
@@ -123,6 +160,9 @@ int isp_init(struct bcwc_private *dev_priv)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
dev_info(&dev_priv->pdev->dev, "ISP woke up after %dms\n",
|
||||
(retries - 1) * 10);
|
||||
|
||||
BCWC_ISP_REG_WRITE(0xffffffff, ISP_REG_41024);
|
||||
|
||||
num_channels = BCWC_ISP_REG_READ(ISP_IPC_NUM_CHAN) + 1;
|
||||
@@ -156,7 +196,6 @@ int isp_init(struct bcwc_private *dev_priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int isp_uninit(struct bcwc_private *dev_priv)
|
||||
{
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user