延迟显示驱动程序恢复直到spi总线恢复

时间:2016-08-09 13:00:05

标签: linux-kernel embedded-linux

我有一个运行linux 3.0.101的嵌入式系统,其中显示驱动程序应该通过spi向小型微控制器发送请求,以启动显示模块和背光升压转换器。

这应该发生在每个恢复周期。

我的问题是显示恢复功能的调用早于调用SPI恢复。在SPI简历中,我们需要向这个涉及电源管理的小型微处理器发送一些初始化代码。只有在此之后,所有其他设备才能发送微功率请求。

我不想更改我已经拥有的驱动程序的init类型(如early_init或类似),而是我想在我的显示器和SPI总线之间创建一个依赖关系,以便恢复显示只有在SPI恢复之后。

显示驱动程序如下所示:

static struct amba_driver clcd_driver = {
    .drv = {
        .name = "clcd-pl11x",
        .owner   = THIS_MODULE,
    },
    .probe      = clcdfb_probe,
    .remove     = __devexit_p(clcdfb_remove),
    .suspend = clcdfb_suspend,
    .resume     = clcdfb_resume,
    .id_table   = clcdfb_id_table,
};
static int __init amba_clcdfb_init(void)
{
...
   return amba_driver_register(&clcd_driver);
}

module_init(amba_clcdfb_init);
module_exit(amba_clcdfb_exit);

对于SPI,我们有:

static struct spi_driver mymicro_spi_driver = {
      .driver = {
            .name   = "mymicro",
            .bus    = &spi_bus_type,
            .owner  = THIS_MODULE,
      },
      .probe  = mymicro_spi_probe,
      .remove = __devexit_p(mymicro_spi_remove),
      .suspend = mymicro_suspend,
      .resume = mymicro_resume,
};
int _leap_driver_insmod(int majorNum)
{
   ...
   return spi_register_driver(&mymicro_spi_driver);
}

所以,我的问题是:这至少可以创建这种依赖关系,如果是的话,怎么样?也许是一些宏?

谢谢你, 西巴

系统说明: 电源管理微控制器(PMM)通过SPI连接到应用处理器(AP) PMM控制到AP,显示器和系统中其他模块的电源线 有一条“永远在线”的电源线为PMM供电 AP连接到显示器。它有内部TFT控制器 AP有外部SDRAM

在低功耗模式下,只有PMM有电源和SDRAM,后者处于自刷新模式。 PMM接收外部中断,ant从HALT返回到运行状态。检查条件并开始AP上电序列。 AP恢复内核,因为在SDRAM中已经存在(正在自刷新)。

直到现在,一切都按预期进行。

背景故事:PMM有一些我们怀疑在其中的错误,即SPI内部控制器上的硬件。所以,他收到的第一个字节是乱码。在内核SPI驱动程序的AP中,我们有一个解决方法。如果在其他驱动器之前未触发SPI恢复,则当显示驱动器恢复时,它将通过SPI向PMM请求为TFT和背光供电,它将失效。

这就是为什么我们必须让SPI在需要与PMM通信的其他驱动程序之前恢复。

对于移动,飞机之间的电汇更新感到抱歉

0 个答案:

没有答案