mirror of https://gitee.com/openkylin/linux.git
Update extcon for 5.4
Detailed description for this pull request: 1. Clean up the and fix the minor issue of extcon provider driver - extcon-arizona/max77843 replace the helper function with more correct helper function without operation changes. - extcon-fsa9480 supports the FSA880 variant by adding the compatible name. - extcon-arizona updates the dt-binding file for the readability. - extcon-gpio initializes the interrupt flags according to active-low state. - Clean up extcon-sm5502/axp288/adc-jack -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJdY0eTAAoJEJzN3yze689TFcMQAKh3876lhzg6r49exvBS7XQb 16YQRKqyWqlR44EbBBy2OrOUVeZjng8o2ZJhAOzFo01RFUx2242ds45Ithn8oZ5H UDgNh3OW/INT6Ey+QKt7uu3yjzEuOekab79SdOgazpUUH39Jbjsb20NRKvWR/zRv 7SNROcgyEK0En5z3ts0HJf+6ySiKxzejXrohHprmh2VPCduLGxWlb2PccwCxufFy tHbGkSuwgqidL+yjR9s+CaV9M7aKqZzUYcBsNlG6CBau/RKI35nyAryakfav6q1x ZRznS559fCJCgUi+W2mx8tcfQ5j3Gkp33CgVSXahkughtBxDmzfPFHV7J3CV3mU8 zGeRL9zQUWjEEv6F42NsRM8MmW9+tQtrKn/emPtsbsSxAuDG5S5flFlipUErOdRd FMDm8VaSmWHhxKUS1rcbSazG6kXFZ+d/3TFn3fSQERx+Q/i+EDeRG+Wa4lHJtgt4 SHCma0IrPtmKl7raN+XkuvsIzOMfB05nMmlq5YO7QKUAUZZtj2lNzpKhL6t6aNTX 4xcvBUtH/pvZTXSZanTTqaQG+XVLvi3hsT5ECKFOyKNCmrgaxbcWhnh0fnax2h6K SXPLK19vLj8ofaBDanlWPdw3QCqGGtne9qo4bQyTbjdTL1FZfg+yiqNEQp0NeSgP qbA3oV1chw/l7sAME9Ht =4VMi -----END PGP SIGNATURE----- Merge tag 'extcon-next-for-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon into char-misc-next Chanwoo writes: Update extcon for 5.4 Detailed description for this pull request: 1. Clean up the and fix the minor issue of extcon provider driver - extcon-arizona/max77843 replace the helper function with more correct helper function without operation changes. - extcon-fsa9480 supports the FSA880 variant by adding the compatible name. - extcon-arizona updates the dt-binding file for the readability. - extcon-gpio initializes the interrupt flags according to active-low state. - Clean up extcon-sm5502/axp288/adc-jack * tag 'extcon-next-for-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon: extcon: adc-jack: Remove dev_err() usage after platform_get_irq() extcon: axp288: Use for_each_set_bit() in axp288_extcon_log_rsi() extcon: axp288: Add missed error check extcon: sm5502: Add IRQ_ONESHOT extcon: gpio: Request reasonable interrupts extcon: arizona: Update binding example to use available defines extcon: fsa9480: Support the FSA880 variant extcon: extcon-max77843: convert to i2c_new_dummy_device extcon: arizona: Switch to use device_property_count_u32()
This commit is contained in:
commit
77fda29f9c
|
@ -72,5 +72,5 @@ codec: wm8280@0 {
|
|||
1 2 1 /* MICDET2 MICBIAS2 GPIO=high */
|
||||
>;
|
||||
|
||||
wlf,gpsw = <0>;
|
||||
wlf,gpsw = <ARIZONA_GPSW_OPEN>;
|
||||
};
|
||||
|
|
|
@ -5,7 +5,9 @@ controlled using I2C and enables USB data, stereo and mono audio, video,
|
|||
microphone, and UART data to use a common connector port.
|
||||
|
||||
Required properties:
|
||||
- compatible : Must be "fcs,fsa9480"
|
||||
- compatible : Must be one of
|
||||
"fcs,fsa9480"
|
||||
"fcs,fsa880"
|
||||
- reg : Specifies i2c slave address. Must be 0x25.
|
||||
- interrupts : Should contain one entry specifying interrupt signal of
|
||||
interrupt parent to which interrupt pin of the chip is connected.
|
||||
|
|
|
@ -140,10 +140,8 @@ static int adc_jack_probe(struct platform_device *pdev)
|
|||
return err;
|
||||
|
||||
data->irq = platform_get_irq(pdev, 0);
|
||||
if (data->irq < 0) {
|
||||
dev_err(&pdev->dev, "platform_get_irq failed\n");
|
||||
if (data->irq < 0)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
err = request_any_context_irq(data->irq, adc_jack_irq_thread,
|
||||
pdata->irq_flags, pdata->name, data);
|
||||
|
|
|
@ -1253,7 +1253,7 @@ static int arizona_extcon_get_micd_configs(struct device *dev,
|
|||
int i, j;
|
||||
u32 *vals;
|
||||
|
||||
nconfs = device_property_read_u32_array(arizona->dev, prop, NULL, 0);
|
||||
nconfs = device_property_count_u32(arizona->dev, prop);
|
||||
if (nconfs <= 0)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -121,7 +121,6 @@ static const char * const axp288_pwr_up_down_info[] = {
|
|||
"Last shutdown caused by PMIC UVLO threshold",
|
||||
"Last shutdown caused by SOC initiated cold off",
|
||||
"Last shutdown caused by user pressing the power button",
|
||||
NULL,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -130,18 +129,21 @@ static const char * const axp288_pwr_up_down_info[] = {
|
|||
*/
|
||||
static void axp288_extcon_log_rsi(struct axp288_extcon_info *info)
|
||||
{
|
||||
const char * const *rsi;
|
||||
unsigned int val, i, clear_mask = 0;
|
||||
unsigned long bits;
|
||||
int ret;
|
||||
|
||||
ret = regmap_read(info->regmap, AXP288_PS_BOOT_REASON_REG, &val);
|
||||
for (i = 0, rsi = axp288_pwr_up_down_info; *rsi; rsi++, i++) {
|
||||
if (val & BIT(i)) {
|
||||
dev_dbg(info->dev, "%s\n", *rsi);
|
||||
clear_mask |= BIT(i);
|
||||
}
|
||||
if (ret < 0) {
|
||||
dev_err(info->dev, "failed to read reset source indicator\n");
|
||||
return;
|
||||
}
|
||||
|
||||
bits = val & GENMASK(ARRAY_SIZE(axp288_pwr_up_down_info) - 1, 0);
|
||||
for_each_set_bit(i, &bits, ARRAY_SIZE(axp288_pwr_up_down_info))
|
||||
dev_dbg(info->dev, "%s\n", axp288_pwr_up_down_info[i]);
|
||||
clear_mask = bits;
|
||||
|
||||
/* Clear the register value for next reboot (write 1 to clear bit) */
|
||||
regmap_write(info->regmap, AXP288_PS_BOOT_REASON_REG, clear_mask);
|
||||
}
|
||||
|
|
|
@ -363,6 +363,7 @@ MODULE_DEVICE_TABLE(i2c, fsa9480_id);
|
|||
|
||||
static const struct of_device_id fsa9480_of_match[] = {
|
||||
{ .compatible = "fcs,fsa9480", },
|
||||
{ .compatible = "fcs,fsa880", },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fsa9480_of_match);
|
||||
|
|
|
@ -22,26 +22,22 @@
|
|||
/**
|
||||
* struct gpio_extcon_data - A simple GPIO-controlled extcon device state container.
|
||||
* @edev: Extcon device.
|
||||
* @irq: Interrupt line for the external connector.
|
||||
* @work: Work fired by the interrupt.
|
||||
* @debounce_jiffies: Number of jiffies to wait for the GPIO to stabilize, from the debounce
|
||||
* value.
|
||||
* @gpiod: GPIO descriptor for this external connector.
|
||||
* @extcon_id: The unique id of specific external connector.
|
||||
* @debounce: Debounce time for GPIO IRQ in ms.
|
||||
* @irq_flags: IRQ Flags (e.g., IRQF_TRIGGER_LOW).
|
||||
* @check_on_resume: Boolean describing whether to check the state of gpio
|
||||
* while resuming from sleep.
|
||||
*/
|
||||
struct gpio_extcon_data {
|
||||
struct extcon_dev *edev;
|
||||
int irq;
|
||||
struct delayed_work work;
|
||||
unsigned long debounce_jiffies;
|
||||
struct gpio_desc *gpiod;
|
||||
unsigned int extcon_id;
|
||||
unsigned long debounce;
|
||||
unsigned long irq_flags;
|
||||
bool check_on_resume;
|
||||
};
|
||||
|
||||
|
@ -69,6 +65,8 @@ static int gpio_extcon_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct gpio_extcon_data *data;
|
||||
struct device *dev = &pdev->dev;
|
||||
unsigned long irq_flags;
|
||||
int irq;
|
||||
int ret;
|
||||
|
||||
data = devm_kzalloc(dev, sizeof(struct gpio_extcon_data), GFP_KERNEL);
|
||||
|
@ -82,15 +80,26 @@ static int gpio_extcon_probe(struct platform_device *pdev)
|
|||
* developed to get the extcon id from device-tree or others.
|
||||
* On later, it have to be solved.
|
||||
*/
|
||||
if (!data->irq_flags || data->extcon_id > EXTCON_NONE)
|
||||
if (data->extcon_id > EXTCON_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
data->gpiod = devm_gpiod_get(dev, "extcon", GPIOD_IN);
|
||||
if (IS_ERR(data->gpiod))
|
||||
return PTR_ERR(data->gpiod);
|
||||
data->irq = gpiod_to_irq(data->gpiod);
|
||||
if (data->irq <= 0)
|
||||
return data->irq;
|
||||
irq = gpiod_to_irq(data->gpiod);
|
||||
if (irq <= 0)
|
||||
return irq;
|
||||
|
||||
/*
|
||||
* It is unlikely that this is an acknowledged interrupt that goes
|
||||
* away after handling, what we are looking for are falling edges
|
||||
* if the signal is active low, and rising edges if the signal is
|
||||
* active high.
|
||||
*/
|
||||
if (gpiod_is_active_low(data->gpiod))
|
||||
irq_flags = IRQF_TRIGGER_FALLING;
|
||||
else
|
||||
irq_flags = IRQF_TRIGGER_RISING;
|
||||
|
||||
/* Allocate the memory of extcon devie and register extcon device */
|
||||
data->edev = devm_extcon_dev_allocate(dev, &data->extcon_id);
|
||||
|
@ -109,8 +118,8 @@ static int gpio_extcon_probe(struct platform_device *pdev)
|
|||
* Request the interrupt of gpio to detect whether external connector
|
||||
* is attached or detached.
|
||||
*/
|
||||
ret = devm_request_any_context_irq(dev, data->irq,
|
||||
gpio_irq_handler, data->irq_flags,
|
||||
ret = devm_request_any_context_irq(dev, irq,
|
||||
gpio_irq_handler, irq_flags,
|
||||
pdev->name, data);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
|
@ -774,12 +774,12 @@ static int max77843_init_muic_regmap(struct max77693_dev *max77843)
|
|||
{
|
||||
int ret;
|
||||
|
||||
max77843->i2c_muic = i2c_new_dummy(max77843->i2c->adapter,
|
||||
max77843->i2c_muic = i2c_new_dummy_device(max77843->i2c->adapter,
|
||||
I2C_ADDR_MUIC);
|
||||
if (!max77843->i2c_muic) {
|
||||
if (IS_ERR(max77843->i2c_muic)) {
|
||||
dev_err(&max77843->i2c->dev,
|
||||
"Cannot allocate I2C device for MUIC\n");
|
||||
return -ENOMEM;
|
||||
return PTR_ERR(max77843->i2c_muic);
|
||||
}
|
||||
|
||||
i2c_set_clientdata(max77843->i2c_muic, max77843);
|
||||
|
|
|
@ -597,7 +597,7 @@ static int sm5022_muic_i2c_probe(struct i2c_client *i2c,
|
|||
|
||||
ret = devm_request_threaded_irq(info->dev, virq, NULL,
|
||||
sm5502_muic_irq_handler,
|
||||
IRQF_NO_SUSPEND,
|
||||
IRQF_NO_SUSPEND | IRQF_ONESHOT,
|
||||
muic_irq->name, info);
|
||||
if (ret) {
|
||||
dev_err(info->dev,
|
||||
|
|
Loading…
Reference in New Issue