// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2016 Nexell Co., Ltd. * * Author: junghyun, kim */ #include #include #include "s5pxx18_soc_disptop.h" #include "s5pxx18_soc_lvds.h" #ifndef pow static inline unsigned int pow(int a, int b) { if (b == 0) return 1; else return a * pow(a, b - 1); } #endif static struct nx_lvds_register_set *__g_pregister[NUMBER_OF_LVDS_MODULE]; int nx_lvds_initialize(void) { static int binit; u32 i; if (binit == 0) { for (i = 0; i < NUMBER_OF_LVDS_MODULE; i++) __g_pregister[i] = NULL; binit = 1; } return 1; } u32 nx_lvds_get_number_of_module(void) { return NUMBER_OF_LVDS_MODULE; } u32 nx_lvds_get_size_of_register_set(void) { return sizeof(struct nx_lvds_register_set); } void nx_lvds_set_base_address(u32 module_index, void *base_address) { __g_pregister[module_index] = (struct nx_lvds_register_set *)base_address; } void *nx_lvds_get_base_address(u32 module_index) { return (void *)__g_pregister[module_index]; } u32 nx_lvds_get_physical_address(u32 module_index) { const u32 physical_addr[] = PHY_BASEADDR_LVDS_LIST; return physical_addr[module_index]; } int nx_lvds_open_module(u32 module_index) { return true; } int nx_lvds_close_module(u32 module_index) { return true; } int nx_lvds_check_busy(u32 module_index) { return false; } void nx_lvds_set_lvdsctrl0(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsctrl0); } void nx_lvds_set_lvdsctrl1(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsctrl1); } void nx_lvds_set_lvdsctrl2(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsctrl2); } void nx_lvds_set_lvdsctrl3(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsctrl3); } void nx_lvds_set_lvdsctrl4(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsctrl4); } void nx_lvds_set_lvdstmode0(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdstmode0); } void nx_lvds_set_lvdsloc0(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc0); } void nx_lvds_set_lvdsloc1(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc1); } void nx_lvds_set_lvdsloc2(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc2); } void nx_lvds_set_lvdsloc3(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc3); } void nx_lvds_set_lvdsloc4(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc4); } void nx_lvds_set_lvdsloc5(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc5); } void nx_lvds_set_lvdsloc6(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdsloc6); } void nx_lvds_set_lvdslocmask0(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdslocmask0); } void nx_lvds_set_lvdslocmask1(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdslocmask1); } void nx_lvds_set_lvdslocpol0(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdslocpol0); } void nx_lvds_set_lvdslocpol1(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; writel(regvalue, &pregister->lvdslocpol1); } void nx_lvds_set_lvdsdummy(u32 module_index, u32 regvalue) { register struct nx_lvds_register_set *pregister; u32 oldvalue; pregister = __g_pregister[module_index]; oldvalue = readl(&pregister->lvdsctrl1) & 0x00ffffff; writel(oldvalue | ((regvalue & 0xff) << 24), &pregister->lvdsctrl1); } u32 nx_lvds_get_lvdsdummy(u32 module_index) { register struct nx_lvds_register_set *pregister; u32 oldvalue; pregister = __g_pregister[module_index]; oldvalue = readl(&pregister->lvdsctrl1); oldvalue = oldvalue >> 24; return oldvalue; } u32 nx_lvds_get_lvdsctrl0(u32 module_index) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; return (u32)readl(&pregister->lvdsctrl0); } u32 nx_lvds_get_lvdsctrl1(u32 module_index) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; return (u32)readl(&pregister->lvdsctrl1); } u32 nx_lvds_get_lvdsctrl2(u32 module_index) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; return (u32)readl(&pregister->lvdsctrl2); } u32 nx_lvds_get_lvdsctrl3(u32 module_index) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; return (u32)readl(&pregister->lvdsctrl3); } u32 nx_lvds_get_lvdsctrl4(u32 module_index) { register struct nx_lvds_register_set *pregister; pregister = __g_pregister[module_index]; return (u32)readl(&pregister->lvdsctrl4); }