18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright 2011 Florian Tobias Schandinat <FlorianSchandinat@gmx.de> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci/* 68c2ecf20Sopenharmony_ci * driver for Silicon Image SiI 164 PanelLink Transmitter 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/slab.h> 108c2ecf20Sopenharmony_ci#include "via_aux.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistatic const char *name = "SiI 164 PanelLink Transmitter"; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistatic void probe(struct via_aux_bus *bus, u8 addr) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci struct via_aux_drv drv = { 198c2ecf20Sopenharmony_ci .bus = bus, 208c2ecf20Sopenharmony_ci .addr = addr, 218c2ecf20Sopenharmony_ci .name = name}; 228c2ecf20Sopenharmony_ci /* check vendor id and device id */ 238c2ecf20Sopenharmony_ci const u8 id[] = {0x01, 0x00, 0x06, 0x00}, len = ARRAY_SIZE(id); 248c2ecf20Sopenharmony_ci u8 tmp[ARRAY_SIZE(id)]; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len)) 278c2ecf20Sopenharmony_ci return; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci printk(KERN_INFO "viafb: Found %s at address 0x%x\n", name, addr); 308c2ecf20Sopenharmony_ci via_aux_add(&drv); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid via_aux_sii164_probe(struct via_aux_bus *bus) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci u8 i; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci for (i = 0x38; i <= 0x3F; i++) 388c2ecf20Sopenharmony_ci probe(bus, i); 398c2ecf20Sopenharmony_ci} 40