Commit 7d2594cd authored by Michael Walle's avatar Michael Walle Committed by Lee Jones
Browse files

mfd: smsc-ece1099: Remove driver



This MFD driver has no user. The keypad driver of this device never made
it into the kernel. Therefore, this driver is useless. Remove it.

Signed-off-by: default avatarMichael Walle <michael@walle.cc>
Cc: Sourav Poddar <sourav.poddar@ti.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 44e6171e
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -98,7 +98,6 @@ available subsections can be seen below.
   rfkill
   serial/index
   sm501
   smsc_ece1099
   switchtec
   sync_file
   vfio-mediated-device
+0 −60
Original line number Diff line number Diff line
=================================================
Msc Keyboard Scan Expansion/GPIO Expansion device
=================================================

What is smsc-ece1099?
----------------------

The ECE1099 is a 40-Pin 3.3V Keyboard Scan Expansion
or GPIO Expansion device. The device supports a keyboard
scan matrix of 23x8. The device is connected to a Master
via the SMSC BC-Link interface or via the SMBus.
Keypad scan Input(KSI) and Keypad Scan Output(KSO) signals
are multiplexed with GPIOs.

Interrupt generation
--------------------

Interrupts can be generated by an edge detection on a GPIO
pin or an edge detection on one of the bus interface pins.
Interrupts can also be detected on the keyboard scan interface.
The bus interrupt pin (BC_INT# or SMBUS_INT#) is asserted if
any bit in one of the Interrupt Status registers is 1 and
the corresponding Interrupt Mask bit is also 1.

In order for software to determine which device is the source
of an interrupt, it should first read the Group Interrupt Status Register
to determine which Status register group is a source for the interrupt.
Software should read both the Status register and the associated Mask register,
then AND the two values together. Bits that are 1 in the result of the AND
are active interrupts. Software clears an interrupt by writing a 1 to the
corresponding bit in the Status register.

Communication Protocol
----------------------

- SMbus slave Interface
	The host processor communicates with the ECE1099 device
	through a series of read/write registers via the SMBus
	interface. SMBus is a serial communication protocol between
	a computer host and its peripheral devices. The SMBus data
	rate is 10KHz minimum to 400 KHz maximum

- Slave Bus Interface
	The ECE1099 device SMBus implementation is a subset of the
	SMBus interface to the host. The device is a slave-only SMBus device.
	The implementation in the device is a subset of SMBus since it
	only supports four protocols.

	The Write Byte, Read Byte, Send Byte, and Receive Byte protocols are the
	only valid SMBus protocols for the device.

- BC-LinkTM Interface
	The BC-Link is a proprietary bus that allows communication
	between a Master device and a Companion device. The Master
	device uses this serial bus to read and write registers
	located on the Companion device. The bus comprises three signals,
	BC_CLK, BC_DAT and BC_INT#. The Master device always provides the
	clock, BC_CLK, and the Companion device is the source for an
	independent asynchronous interrupt signal, BC_INT#. The ECE1099
	supports BC-Link speeds up to 24MHz.
+0 −12
Original line number Diff line number Diff line
@@ -1193,18 +1193,6 @@ config MFD_SKY81452
	  This driver can also be built as a module.  If so, the module
	  will be called sky81452.

config MFD_SMSC
	bool "SMSC ECE1099 series chips"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	help
	  If you say yes here you get support for the
	  ece1099 chips from SMSC.

	  To compile this driver as a module, choose M here: the
	  module will be called smsc.

config MFD_SC27XX_PMIC
	tristate "Spreadtrum SC27xx PMICs"
	depends on ARCH_SPRD || COMPILE_TEST
+0 −1
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ obj-$(CONFIG_MFD_CPCAP) += motorola-cpcap.o
obj-$(CONFIG_MCP)		+= mcp-core.o
obj-$(CONFIG_MCP_SA11X0)	+= mcp-sa11x0.o
obj-$(CONFIG_MCP_UCB1200)	+= ucb1x00-core.o
obj-$(CONFIG_MFD_SMSC)        += smsc-ece1099.o
obj-$(CONFIG_MCP_UCB1200_TS)	+= ucb1x00-ts.o

ifeq ($(CONFIG_SA1100_ASSABET),y)

drivers/mfd/smsc-ece1099.c

deleted100644 → 0
+0 −87
Original line number Diff line number Diff line
/*
 * TI SMSC MFD Driver
 *
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
 *
 * Author: Sourav Poddar <sourav.poddar@ti.com>
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under  the terms of the GNU General  Public License as published by the
 *  Free Software Foundation;  GPL v2.
 *
 */

#include <linux/init.h>
#include <linux/slab.h>
#include <linux/i2c.h>
#include <linux/gpio.h>
#include <linux/workqueue.h>
#include <linux/irq.h>
#include <linux/regmap.h>
#include <linux/err.h>
#include <linux/mfd/core.h>
#include <linux/mfd/smsc.h>
#include <linux/of_platform.h>

static const struct regmap_config smsc_regmap_config = {
		.reg_bits = 8,
		.val_bits = 8,
		.max_register = SMSC_VEN_ID_H,
		.cache_type = REGCACHE_RBTREE,
};

static int smsc_i2c_probe(struct i2c_client *i2c,
			const struct i2c_device_id *id)
{
	struct smsc *smsc;
	int devid, rev, venid_l, venid_h;
	int ret;

	smsc = devm_kzalloc(&i2c->dev, sizeof(*smsc), GFP_KERNEL);
	if (!smsc)
		return -ENOMEM;

	smsc->regmap = devm_regmap_init_i2c(i2c, &smsc_regmap_config);
	if (IS_ERR(smsc->regmap))
		return PTR_ERR(smsc->regmap);

	i2c_set_clientdata(i2c, smsc);
	smsc->dev = &i2c->dev;

#ifdef CONFIG_OF
	of_property_read_u32(i2c->dev.of_node, "clock", &smsc->clk);
#endif

	regmap_read(smsc->regmap, SMSC_DEV_ID, &devid);
	regmap_read(smsc->regmap, SMSC_DEV_REV, &rev);
	regmap_read(smsc->regmap, SMSC_VEN_ID_L, &venid_l);
	regmap_read(smsc->regmap, SMSC_VEN_ID_H, &venid_h);

	dev_info(&i2c->dev, "SMSCxxx devid: %02x rev: %02x venid: %02x\n",
		devid, rev, (venid_h << 8) | venid_l);

	ret = regmap_write(smsc->regmap, SMSC_CLK_CTRL, smsc->clk);
	if (ret)
		return ret;

#ifdef CONFIG_OF
	if (i2c->dev.of_node)
		ret = devm_of_platform_populate(&i2c->dev);
#endif

	return ret;
}

static const struct i2c_device_id smsc_i2c_id[] = {
	{ "smscece1099", 0},
	{},
};

static struct i2c_driver smsc_i2c_driver = {
	.driver = {
		   .name = "smsc",
	},
	.probe = smsc_i2c_probe,
	.id_table = smsc_i2c_id,
};
builtin_i2c_driver(smsc_i2c_driver);
Loading