File Index
Files and directories
Sign in
FILE

h3600.c

File preview with syntax highlighting.

linux-6.19.14/arch/arm/mach-sa1100/h3600.c C
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Support for Compaq iPAQ H3600 handheld computer
  4 *
  5 * Copyright (c) 2000,1 Compaq Computer Corporation. (Author: Jamey Hicks)
  6 * Copyright (c) 2009 Dmitry Artamonow <mad_soft@inbox.ru>
  7 */
  8
  9#include <linux/init.h>
 10#include <linux/kernel.h>
 11#include <linux/gpio.h>
 12
 13#include <video/sa1100fb.h>
 14
 15#include <asm/mach-types.h>
 16#include <asm/mach/arch.h>
 17
 18#include <mach/h3xxx.h>
 19#include <mach/irqs.h>
 20
 21#include "generic.h"
 22
 23static bool h3600_lcd_request(void)
 24{
 25	static bool h3600_lcd_ok;
 26	int rc;
 27
 28	if (h3600_lcd_ok)
 29		return true;
 30
 31	rc = gpio_request(H3XXX_EGPIO_LCD_ON, "LCD power");
 32	if (rc)
 33		goto out;
 34	rc = gpio_direction_output(H3XXX_EGPIO_LCD_ON, 0);
 35	if (rc)
 36		goto out_free_on;
 37	rc = gpio_request(H3600_EGPIO_LCD_PCI, "LCD control");
 38	if (rc)
 39		goto out_free_on;
 40	rc = gpio_direction_output(H3600_EGPIO_LCD_PCI, 0);
 41	if (rc)
 42		goto out_free_pci;
 43	rc = gpio_request(H3600_EGPIO_LCD_5V_ON, "LCD 5v");
 44	if (rc)
 45		goto out_free_pci;
 46	rc = gpio_direction_output(H3600_EGPIO_LCD_5V_ON, 0);
 47	if (rc)
 48		goto out_free_5v_on;
 49	rc = gpio_request(H3600_EGPIO_LVDD_ON, "LCD 9v/-6.5v");
 50	if (rc)
 51		goto out_free_5v_on;
 52	rc = gpio_direction_output(H3600_EGPIO_LVDD_ON, 0);
 53	if (rc)
 54		goto out_free_lvdd_on;
 55
 56	goto out;
 57
 58out_free_lvdd_on:
 59	gpio_free(H3600_EGPIO_LVDD_ON);
 60out_free_5v_on:
 61	gpio_free(H3600_EGPIO_LCD_5V_ON);
 62out_free_pci:
 63	gpio_free(H3600_EGPIO_LCD_PCI);
 64out_free_on:
 65	gpio_free(H3XXX_EGPIO_LCD_ON);
 66out:
 67	if (rc)
 68		pr_err("%s: can't request GPIOs\n", __func__);
 69	else
 70		h3600_lcd_ok = true;
 71
 72	return h3600_lcd_ok;
 73}
 74
 75static void h3600_lcd_power(int enable)
 76{
 77	if (!h3600_lcd_request())
 78		return;
 79
 80	gpio_direction_output(H3XXX_EGPIO_LCD_ON, enable);
 81	gpio_direction_output(H3600_EGPIO_LCD_PCI, enable);
 82	gpio_direction_output(H3600_EGPIO_LCD_5V_ON, enable);
 83	gpio_direction_output(H3600_EGPIO_LVDD_ON, enable);
 84}
 85
 86static const struct sa1100fb_rgb h3600_rgb_16 = {
 87	.red	= { .offset = 12, .length = 4, },
 88	.green	= { .offset = 7,  .length = 4, },
 89	.blue	= { .offset = 1,  .length = 4, },
 90	.transp	= { .offset = 0,  .length = 0, },
 91};
 92
 93static struct sa1100fb_mach_info h3600_lcd_info = {
 94	.pixclock	= 174757, 	.bpp		= 16,
 95	.xres		= 320,		.yres		= 240,
 96
 97	.hsync_len	= 3,		.vsync_len	= 3,
 98	.left_margin	= 12,		.upper_margin	= 10,
 99	.right_margin	= 17,		.lower_margin	= 1,
100
101	.cmap_static	= 1,
102
103	.lccr0		= LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
104	.lccr3		= LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
105
106	.rgb[RGB_16] = &h3600_rgb_16,
107
108	.lcd_power = h3600_lcd_power,
109};
110
111
112static void __init h3600_map_io(void)
113{
114	h3xxx_map_io();
115}
116
117static void __init h3600_mach_init(void)
118{
119	h3xxx_mach_init();
120
121	sa11x0_register_lcd(&h3600_lcd_info);
122}
123
124MACHINE_START(H3600, "Compaq iPAQ H3600")
125	.atag_offset	= 0x100,
126	.map_io		= h3600_map_io,
127	.nr_irqs	= SA1100_NR_IRQS,
128	.init_irq	= sa1100_init_irq,
129	.init_time	= sa1100_timer_init,
130	.init_machine	= h3600_mach_init,
131	.init_late	= sa11x0_init_late,
132	.restart	= sa11x0_restart,
133MACHINE_END
134
~/ Read-only file preview.