[LG V30 Questions & Answers] Septfox:
Does your charging still work at full speed when the screen is off?

I was looking at Lunar kernel, which is built on LG's source (well, I assume). Here is the code to determine current limitation:

static int restricted_charging_find_current(int reason, int status)
{
int chg_curr;

if (!the_cc)
return -EINVAL;

switch (reason) {
case LGCC_REASON_LCD:
if (status == RESTRICTED_CHG_STATUS_ON) {
the_cc->lcd_status = true;
chg_curr = RESTRICTED_CHG_CURRENT_1000;
} else {
the_cc->lcd_status = false;
chg_curr = -EINVAL;
}
break;
case LGCC_REASON_CALL:
if (status == RESTRICTED_CHG_STATUS_ON)
chg_curr = RESTRICTED_CHG_CURRENT_500;
else
chg_curr = -EINVAL;
break;
case LGCC_REASON_TDMB:
if (status == RESTRICTED_CHG_STATUS_MODE1)
chg_curr = RESTRICTED_CHG_CURRENT_500;
else if (status == RESTRICTED_CHG_STATUS_MODE2)
chg_curr = RESTRICTED_CHG_CURRENT_500;
else
chg_curr = -EINVAL;
break;
case LGCC_REASON_UHD_RECORD:
if (status == RESTRICTED_CHG_STATUS_ON) {
the_cc->uhd_record = 1;
if (delayed_work_pending(&the_cc->uhd_record_work)
|| delayed_work_pending(&the_cc->uhd_record_disable_work)) {
cancel_delayed_work_sync(&the_cc->uhd_record_disable_work);
} else {
queue_delayed_work(system_power_efficient_wq,
&the_cc->uhd_record_work, DELAY_FOR_UHD_RECORD_PERIOD);
}
} else {
the_cc->uhd_record = 0;
queue_delayed_work(system_power_efficient_wq,
&the_cc->uhd_record_disable_work, DELAY_FOR_UHD_RECORD_DISABLE_PERIOD);
}
chg_curr = RESTRICTED_CHG_CURRENT_500;
break;
case LGCC_REASON_MIRACAST:
if (status == RESTRICTED_CHG_STATUS_ON)
chg_curr = RESTRICTED_CHG_CURRENT_500;
else
chg_curr = -EINVAL;
break;
case LGCC_REASON_DEFAULT:
default:
chg_curr = CHG_CURRENT_MAX;
restricted_chg_unvote_all();
break;
}

return chg_curr;
}

restricted_charging is set by this, I think:

static int restricted_charging_param_set(const char *val, const struct kernel_param *kp)
{
char *s = strstrip((char *)val);
char *voter_name, *voter_status;
int chg_curr, name, status, ret;

if (s == NULL) {
pr_err("Restrict charging param is NULL! \n");
return -EINVAL;
}

pr_info("Restricted charging param = %s \n", s);

ret = param_set_charp(val, kp);

if (ret) {
pr_err("Error setting param %d\n", ret);
return ret;
}

voter_name = strsep(&s, " ");
voter_status = s;

name = restricted_charging_find_name(voter_name);
status = restricted_charging_find_status(voter_status);

if (name == -EINVAL || status == -EINVAL) {
pr_err("Restrict charging param is invalid! \n");
return -EINVAL;
}

chg_curr = restricted_charging_find_current(name, status);
pr_info("voter_name = %s[%d], voter_status = %s[%d], chg_curr = %d \n",
voter_name, name, voter_status, status, chg_curr);

lgcc_vote_fcc(name, chg_curr);
lge_power_changed(&the_cc->lge_cc_lpc);

return 0;
}

...and then read, and acted on by the first batch of code.

So forcing it to read-only should effectively keep the charging limit disabled, I think, because the module reads restricted_charging and assumes that the screen is off. If you're still able to charge at full speed with the screen off, that would confirm it.

A possibly undesirable side-effect: this probably also disables the module's ability to reduce the charge rate in response to excessive heat. Be careful.