summaryrefslogtreecommitdiff
path: root/drivers/nfc/trf7970a.c
diff options
context:
space:
mode:
authorPaul Geurts <paul_geurts@live.nl>2024-04-18 21:25:38 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-05-02 16:32:36 +0200
commitcffee39d36154e2f62247b01f3ec6f450b311d84 (patch)
treedab06f523a75acd087528c34e2aad9c8e17bfc38 /drivers/nfc/trf7970a.c
parent0142cbb87cf6f0565d704feff4f63b371790a83f (diff)
downloadlinux-cffee39d36154e2f62247b01f3ec6f450b311d84.tar.gz
linux-cffee39d36154e2f62247b01f3ec6f450b311d84.tar.bz2
linux-cffee39d36154e2f62247b01f3ec6f450b311d84.zip
NFC: trf7970a: disable all regulators on removal
[ Upstream commit 6bea4f03c6a4e973ef369e15aac88f37981db49e ] During module probe, regulator 'vin' and 'vdd-io' are used and enabled, but the vdd-io regulator overwrites the 'vin' regulator pointer. During remove, only the vdd-io is disabled, as the vin regulator pointer is not available anymore. When regulator_put() is called during resource cleanup a kernel warning is given, as the regulator is still enabled. Store the two regulators in separate pointers and disable both the regulators on module remove. Fixes: 49d22c70aaf0 ("NFC: trf7970a: Add device tree option of 1.8 Volt IO voltage") Signed-off-by: Paul Geurts <paul_geurts@live.nl> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/DB7PR09MB26847A4EBF88D9EDFEB1DA0F950E2@DB7PR09MB2684.eurprd09.prod.outlook.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/nfc/trf7970a.c')
-rw-r--r--drivers/nfc/trf7970a.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/drivers/nfc/trf7970a.c b/drivers/nfc/trf7970a.c
index 7eb17f46a815..9e1a34e23af2 100644
--- a/drivers/nfc/trf7970a.c
+++ b/drivers/nfc/trf7970a.c
@@ -424,7 +424,8 @@ struct trf7970a {
enum trf7970a_state state;
struct device *dev;
struct spi_device *spi;
- struct regulator *regulator;
+ struct regulator *vin_regulator;
+ struct regulator *vddio_regulator;
struct nfc_digital_dev *ddev;
u32 quirks;
bool is_initiator;
@@ -1883,7 +1884,7 @@ static int trf7970a_power_up(struct trf7970a *trf)
if (trf->state != TRF7970A_ST_PWR_OFF)
return 0;
- ret = regulator_enable(trf->regulator);
+ ret = regulator_enable(trf->vin_regulator);
if (ret) {
dev_err(trf->dev, "%s - Can't enable VIN: %d\n", __func__, ret);
return ret;
@@ -1926,7 +1927,7 @@ static int trf7970a_power_down(struct trf7970a *trf)
if (trf->en2_gpiod && !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW))
gpiod_set_value_cansleep(trf->en2_gpiod, 0);
- ret = regulator_disable(trf->regulator);
+ ret = regulator_disable(trf->vin_regulator);
if (ret)
dev_err(trf->dev, "%s - Can't disable VIN: %d\n", __func__,
ret);
@@ -2065,37 +2066,37 @@ static int trf7970a_probe(struct spi_device *spi)
mutex_init(&trf->lock);
INIT_DELAYED_WORK(&trf->timeout_work, trf7970a_timeout_work_handler);
- trf->regulator = devm_regulator_get(&spi->dev, "vin");
- if (IS_ERR(trf->regulator)) {
- ret = PTR_ERR(trf->regulator);
+ trf->vin_regulator = devm_regulator_get(&spi->dev, "vin");
+ if (IS_ERR(trf->vin_regulator)) {
+ ret = PTR_ERR(trf->vin_regulator);
dev_err(trf->dev, "Can't get VIN regulator: %d\n", ret);
goto err_destroy_lock;
}
- ret = regulator_enable(trf->regulator);
+ ret = regulator_enable(trf->vin_regulator);
if (ret) {
dev_err(trf->dev, "Can't enable VIN: %d\n", ret);
goto err_destroy_lock;
}
- uvolts = regulator_get_voltage(trf->regulator);
+ uvolts = regulator_get_voltage(trf->vin_regulator);
if (uvolts > 4000000)
trf->chip_status_ctrl = TRF7970A_CHIP_STATUS_VRS5_3;
- trf->regulator = devm_regulator_get(&spi->dev, "vdd-io");
- if (IS_ERR(trf->regulator)) {
- ret = PTR_ERR(trf->regulator);
+ trf->vddio_regulator = devm_regulator_get(&spi->dev, "vdd-io");
+ if (IS_ERR(trf->vddio_regulator)) {
+ ret = PTR_ERR(trf->vddio_regulator);
dev_err(trf->dev, "Can't get VDD_IO regulator: %d\n", ret);
- goto err_destroy_lock;
+ goto err_disable_vin_regulator;
}
- ret = regulator_enable(trf->regulator);
+ ret = regulator_enable(trf->vddio_regulator);
if (ret) {
dev_err(trf->dev, "Can't enable VDD_IO: %d\n", ret);
- goto err_destroy_lock;
+ goto err_disable_vin_regulator;
}
- if (regulator_get_voltage(trf->regulator) == 1800000) {
+ if (regulator_get_voltage(trf->vddio_regulator) == 1800000) {
trf->io_ctrl = TRF7970A_REG_IO_CTRL_IO_LOW;
dev_dbg(trf->dev, "trf7970a config vdd_io to 1.8V\n");
}
@@ -2108,7 +2109,7 @@ static int trf7970a_probe(struct spi_device *spi)
if (!trf->ddev) {
dev_err(trf->dev, "Can't allocate NFC digital device\n");
ret = -ENOMEM;
- goto err_disable_regulator;
+ goto err_disable_vddio_regulator;
}
nfc_digital_set_parent_dev(trf->ddev, trf->dev);
@@ -2137,8 +2138,10 @@ err_shutdown:
trf7970a_shutdown(trf);
err_free_ddev:
nfc_digital_free_device(trf->ddev);
-err_disable_regulator:
- regulator_disable(trf->regulator);
+err_disable_vddio_regulator:
+ regulator_disable(trf->vddio_regulator);
+err_disable_vin_regulator:
+ regulator_disable(trf->vin_regulator);
err_destroy_lock:
mutex_destroy(&trf->lock);
return ret;
@@ -2157,7 +2160,8 @@ static void trf7970a_remove(struct spi_device *spi)
nfc_digital_unregister_device(trf->ddev);
nfc_digital_free_device(trf->ddev);
- regulator_disable(trf->regulator);
+ regulator_disable(trf->vddio_regulator);
+ regulator_disable(trf->vin_regulator);
mutex_destroy(&trf->lock);
}
XmJJump#fm9H,,(E=>8Z9='y$LH2ιW;-Rr_5bOq%Wp <ɇ`и蠮kq،)dxUJHpNm+#T CF?(g CFd|_gfvͦi>-ĩs$"7 $ɳSJ #f?!k<F!V6lSS[+= 8,.No^^ipD'R&ׅl-[&j"tsŧT" K,h'wπV4; c^,LV"$ 2RS'&yh-P꒛vDACEօɱfc$|&<(yjRq2 VWV-`#Т^ci9$K͌YQnh+gWlX}Clo@u gr댲\D[nayp7{WT89VyHIZѬqђʆi)> `ZnEBUiG{w~=25.;;q~5Hyp*GtLG|B.:>k;NQ~ђng(BYp-M =/C"(ۺ 9JaQx#BN8.wyǂGn< {pRIۢx-MJRmJx*Qb!:*<y{`酬]2੐ʤɵiI3pv&ko5]y$<%@gŠ*\/y;ꥏƏO|;'/V8pZ'v;Ua&C\ԥG#nez%ܗwT4ym tGɱDZF.53R1]8UȘtBOuVb[[Rr?ǐҏ ISXUãOdk8,H=3s;pŽD\Q{BEcyo9{1U~&SWidν s4nb0Pkt]O? #n΂9ՋCxX8gF6~oY_=\u,bBTyf`0Sr"ǻۏ-ÁGsmo P+op'7♮tQ;jiސDL@@uclWEYKLiťeDsot+k%RzPy5ˋedɧ"&@p;(铫a9F7$> rbR_"͛!=<)mq.-}ǃWǎe?˔Uk{%~~:zX&IVoe XY $k.MI>8b`9zٷ7e#fQi< 4q+<*dIAxV T_8M°$ICx]d!^RW #'ۊbJOβJwenNZQ]MkhB2EŜnx1~ȧKVrbxC=HLT wL=y'P,{3IAxf7n@@ٙZ|c1:A^ŹCﰵsb}E];z"tV2/m(r#V MA{S'ԇ?F,~RVc$Dvv1os:Oehm=DG|SWTW!bt11v+n|?m~՞ m`ܐq=xnMNE-=CMh"jG?ZQW,l ,/٣KY%D8forf K_;iʝԋV<" ">fW̿ĕFԶk(ugJ>y (9.+aoqE In59$VPb(߆Ă'UtN>FQ{7}$vPa;<49y۸|ؗo2! $#Y/#{òiarY }mNW4d2~=|쏠'/5]m55Tsc$| eؖlĨ ;=4 ώ ?XإgDhz?NpuzOMLMJHܴ9TөմZ-5W!>" 5Igi& T]VKxO@' ϫtҦYr\=g=ȜκZZ>i2Gjt[ z^[M[7RqڳHuZͩ Mr9QAf[^|NƓM:L_+u 04W] 4톺 o7HG`)/ytiTUڪ^i+YYP'YV;05gݲ6Vcx"B֮85BMI!C\>4OuI.IՇe;jqV;nF4@-X-5D)s1ff[͋[1'&v=q5T7fዚ;B' 6]_63#!qc~]da}NMLF6ژa ۥh%=qެ@JkkCJHkOd̒m,n >𓽵qwk_KX%0vjf<|r$l< 'hOjeYwԬM5~WRҦjŊH^fc)RY`4jPNoWX/-]гHhT{.s5"}|"iM24}.i`lݠN^VJ>cuqp+dj)#f7#K\7y]3X4gov|E-bZ9.<^%l@zGcps3-&R$pzRo®&h0؅eړ~Gw˗#(o 9affk3=e))j1Mלzx6 ͫ)Ar#|5ޑ^ᲦC^dI Wm' 5+ Z=yW봪K7V-sG*„'YX[6MLU 1˥z9\!6-4wrT8܀yGK+)mwd3^Rhh!M$~u20i ȸԝJE܀:"Yז%z/j u3]?6 /U!U%+}\Ύ:HDkpwV:|StwSYK2e;|j޸׀3^&gLL( njl<+͎2gX :Jde;mAb<V:3>W6iP 5ܻiArDA$DFQ'%}B\gADΣ%l4M>/NO. WBuvt:/dgCx']bTx8MB"|YE>ڵv@b@i0}ඇX챴0V 8}"s=ztf!hA"%6{.09 ~߿{'Df/}q>G$:v)υ/7ĠDL| 2<>P|=@&9J-#yķٶH$ Ѥ/!(wVUusEox{[P[\ծ&6 \B1z3R";gBkjVY͎l7ƒ9c,|וssθ 7}8&di2>3ۧ:~z]֝Vv3 QH"%NjdfBv)CJjY}[xpWHN"r"D#^A 4]UoSme42xr_ཱི?=E-͵資ް#"Z?jz5AjFlQ[5F Guph{ART#OU7 "@NCAAq[~~^}:RVfP&R6DMEg(:ٴ. G] d8;yH^.DD $hC{pƅ[GYc7>*_czNcإSj&&xŰRj 7 ZbO8(Y]AɆVC[][j,uɸ(6pHaZLd~pC<΋!IgZZx`tWjtLvq/sP%ずEg8Ϥ8upg&UTnIC־ `=//hZ>i5y~̽9=OU1t4K#35֮Y'ܑW"{C%<%1$XfD؀,U3} <~p-7"~$ctjz?_yC/2#7MRxEz#0/^!'|-hN3hg˵N⚺$\ kƓt).Vn>v s5^MqQ]ZɺvIqb!RLd+t%B4PE tjM{2&ds\ IA/^;QZO֑#9 aEz/|1oB1R4oE5eM 鞅zQ_:yP-H$~ %Tuk@a@"Q<1VWp6mխCj̖jLGZ\G-ERVX$v7P8t:Ufס4xy׹i%3_]u k$LnԿt\B;[0F!{hL$R\&25H''S Tf+ rem^ri7pgR)4 dZ<{%[r9L3 @~8r-|B:Hp' ֱx +'EqW79m6j]s:7i^1Rl]RW] p5Cfg]S 9^$Xd^µR'GpB;2~Z yNfSt fU{k.c` zFB-Kk^ qd/2{o#j5iPQCZ0&*8ŵFkrވžɆ@,p2[n2=,F2MZa;fɡ^0MSpii;u6w嬽p8xカ&Ӛ/尒i;k: OuǠi+ΆT,믯XU,tvF{;KӘ{sԙєT%К鎛>{ (B1e{g+y$i0Ff|5LɚK -ǯOE+&OZ'.n#)4Գ¢~@^Yo =t' =垯v$Z?)zդE`=wiOǴڍ3NPAJ t eGb{~o9+4?]YQ e)I ؚz_*+RgE6L.;g!}y"WeǜZ;Op]9.#f vw}0Sdos ~YEu%թA`͏'Jsb h42S%ϑIf~P$'e)Êz.o@"yhyd돷>Clgyi[7whxt@\ />kOl LḴF§M碌{ƀ.-wjvJZ;uyLRusScHO3t7zu-{tcNykQi1iotU;*s i6+m51 g(«>^+Im \6aHEoĨܛG_HPԻ%/"NwC -d`z,ө;X&0x+/W+_+8{J7K6C*iWmZx7 cNi i˂D`%J ~F99 ^[QѼ.WoK qlL"Xw h}صW5HˁF┌jr_ ,U&ZiԡU<TB1*W DylڀxH0sHy%6AQ%${ݗseSj땺}셱Rd_m>P_4USD;jHKVs~b}g@1pQ>PgE4UsDi|:*I4" tϲ{- 6N d_L&>##-B,OhCz/ B'צZ$: W 铀 pǦAKW4LD2cUۃ-E,I*g8[aDZP-!u2 d)M'~jK/Lqg27:j7լӛF?QN} @:SmP SyƑcGW_TłU!l$%-T J?xZ!wcr< ezͧ#sjrizr @H#D&;m/"Ih;:'UD9BqQ+;}wCxq$~Ʒ-hqNw~ROK8hEdw-@3pe{\]hіq5.11 @ +VpJuAjz(ԁE\&NCf~rWNВ'F1-I6I7LґMsMzUAy|PgeNJ# Lq S"Lb$ɪJyJ~ +{9ys8$DFޮѧ%&bg,;Snz@irI}MTwM՜ #z፻֘&> ";8 j|+)9=i7rn1EiO_>-a(2:]-XqOe !{r&)zh1G-I صI} +iXC,:0@M?qˉzvJ=)ƇPaJtilZFVJ6 > 곻)CD,!RS1ܷxE[5鈫 S݉O̱-ncRoMFJԑIϺvZiWuhniKzj :qե%"A0{gq+iO@;4J63%y]EyfCm(ZcV[rVdEA2S-^UIznp-Vp#nkMrny&ŵ \~2,P{ɒx=l4Iz4w 5~Zc4_hJ}GC"+ڀoO'Oni"{@ڠp=Pc,0w] 9b's8 э5&[ U,øZ1S =zΗ/_ J)RqwԠ_D=aW"U[0f2RSKqX^z2`6c$d阶 w'eհiGS%W(4x||Fʕo /+EH$/Ju{^W{7/B^ aH"Vc tOt ; X:|#ɓߓMfEzk1[[B>a+W+qekos ntђJ#VjJ ]hYLwq:ǀg.Lp5'@1 |z 8QWMtn@+F+gw:;R#b,B=H ڭsT@.84fjLF2AquC#4rdNz4-$ax;uLoׯ\2 v&aR%Ƨ)灓%\ ܠެu /$H6B?hYseNUH1U Cx桒d]VDF#{&f4?]0?HlNb0 l;&!:~8@VUr(3{&G2n{ ^H[hTb?`qGE~xu;fԈϖG_"Lr;6{ ds>YeUU $!G(xkpRd,-2v*4n\ j lFu7}hk~0y5lL,|I/%xS/Of0>h$ɉq|K}rCz ^;{[ə$L;KaW+4ZN^Y Wy8YK;ksr/rn|!4kI߬i>͚9E+\&Z{&isZT$.iA,eyY2//GH)',6X[Nֲ)5£f H @ѧ 0KjhGA+*qDYdSc%5L hGƝ$,6Y{oq_7>?[`Lݑ¨m-f OӂDnJZѪYjڤ4!0!'34y]ue$ݾhq?19ZB^2 R6z(> d:2IdMM@Dv;F$橽Q.2 .bwX낦IȘE#o‘꥾Qov!$V?t")h~ׂ0ez nGGڑM`H;u=A sqw7|M&D64 kM3a_,ps_ke3J{p2%H=ULbȬZcz,"Hz)~y)Qǣ ΥFI8gZOɓNJz4k̥<xp 1Z  f^g1^C=pxi> .M8-Ul.t ZHqv;Tƥ&9NZFEWG5,OJ1fAoRR4Zgdht-Y2MWלi}qw˧Wl窵Itr&_;:sҙ4kG69].;ڳ:j 'G>?Wi;2 VVz@ {;[M)ʭ! &fY\J@X&i#!T""s,7"2? [^ V +qƑ3k®^Dl/M2$hCd5pt^H>wHO"@]bEj1үuc*XСcӠXZL6p[¡ K$\G@pq>On٦vw4j! 25Kz#>(7) bBoFS\P8УJKܾ(K8aL8 *Vv\d8Lg(\˸CZtԧ+~hIOkTFv 'r¥6N"P6S jx7n%{W]| kPcUFَZg ֡FK)r% T۠~ Zzuw*n.56XaۀӎX=܌f織mM4 ǛP#mN\<K;`h'0?MfsHAS/Im 9iy3YCe=s6jLM2ըIK ;JRU0j7U: #:S6Ci=m2Xbf®A $™6SfRvՑ4}:f`Y^XhҰ1qYPJ!a,jd3zZw_?6JŃZV,_=My#KCfۤj7OĨ!SN$@YӮ`〦28 $) ;uduzi]؛;_!ny}BK \K0lvBXYyzݎ)l &oQgC`o&C5mk8TmxcjhhҙuA#k)v mkF[ "iB=QW+bͯ\/VQj79lvˈH ,z) E;d.0FA!VaN}GG ZTc {q^L뱿yl$a6Ui4Zjn}J(  ;YZߣP, ܯݩq8 \ZMޙѣx'šNVQ?π@ b}}0P*1+~OZtdSU-Lwi&I ,;k{b0b$}qFn譻Vս#C0W![!cɼwPr*YR4Z^5WamhBzI`ݺPLOTYH,?9*L9:K]uNsYW\$*X~g/.Ynx@D&xWsHNYa1ii-rqӒC&x«ЅPܚx0I]vO;EdF61#e =J"ۙQs+l,֍$nZRgywj%9lk@Ҡ+YTOMp_%[V`rbPfpv#|j%\VHbr{R3;4}͟'cyu@!;Z!0̃mMڶƸp̓17B Qn$}[~];=j4M5xJ ;\bNB`ߟGm'9ȐhtU}ңE;k6 ~~_b:"xϜԯz;5/3X?-PpTiI]h VɼiJ-]hIP@dKxػxwG0+j>{aJkO1Լ -38d<뉤nyͧǛY6SjTԔYfd4t*mEFR' 2 Gt?dLgA傔*콫Mqkdb6#S${4p&[t:RYjv'uӥBg(rjׂ0X2* ܥe\- ysL:NZS-eX;'Um#ާt*_67irScP|J'VxQ4 e+t׾v|e!p rY3C/|R2"Xn$*bj%4ϸ2i['xJ?,#*(iLJbzjk`Ibe+ }j`|=D7䷮ՂZm6Fn㤘c@ X~`KH."1뙍0RUP ^l5m.lK3T,Q>ޚvl;KO&kGNtR (S*K:nsbde]&>\H4YYo eI`Wo%pڇvݥbPj6E2R"E4pF;g ҾkS=<Ҋ-E"ج\, ]qCLjgg]TZ\mZKFY竇kTO+Z뤢 8 f~I! j6D +3/%*\d%RˋYќ}ͩTfeS*3EB{w + PT>Ytʌ~Wgv $5ƍhz45p ltY(^jXPSY>+D S#ueX{UUWs]5.萺 9%> 1TRczmcd&Umq#!pᐁق,YCʁk[+T]>[2w78{Pf.̟J-qtu"8l3P3:  26VnwO wP=F ?orBVkL{~ 7մ5N ؀Vͮj4T/inm|0G])7LTĕ>V5EAʀSKbJl I3hϡywiY HiWxDJcd#I8I}=M%HdPЩ]?6/cML}V(gv–+KWkq>n?ʳl蒱Nڭj&!;L#644c]4[F@i!aW۽.52|lQɊCxM_me̮ N%pɸ~ѭk=Quڿ4dKk5G7pW](QEH=g2MԆml,F^ss>J/ UH6\OCPx+NfNSq \Y Uh֛͒S<(̹=aciK= i&,O2+>%%F^em@ tEjpAe>3ԣz&(JbW11Aiyx`Q滉^Oi\myW?Qւe{sZ۫eF?9*!y\Z/Npm]"kz+jE\clLjWrޕkI"IZl.FIl0xĽRÈN| 9c)sP݌5)rJ˃ݡg5u6xv:1 ra y Mۑ)iش,4,/Ulukpޚ.^a.:Wk(<=Y_(69vTZNhMV |2\Baȿ}m N;C_\! -b^\sgիJjSu `#׃/Y!DzԚMTk 7V-S?{ `mN,$jJg!01RjN>Go,fqJ.52Tt9z:-Q#czD|h34gve9nsyYϽNmx3|f=pop8$]|EB~\Aa,k0!q%)ǂO8A!ܖN2I'*I)Dԅ -;zst¬$,4Jruz-6U(mg%o+>vj&=7b]'nxI~~0MQR+liHF] B ُKj_N6R5O6}vTɈ!"s,}Ǡ>VZz QN%ոš9SJ ܘb]?bs ,01\i]qp Sb2_MΝja2f4<]ڃ%ϐdXtft]!ǥ &SBKQ;R*6ZY7lN4t==|k IV`4wDI7i15%43O 5F0ɳNH)i:ݳ(H/DGGt9}./f)n:R1]>J,^e,' 6hoMK~`Zb_Ok# .U'blWEL Vb͒ J4k29V N5:yW=ygh$h:VfK _y]כU.adߑXL6l ƖI\sP'{uuuf_2- NJ"өDv᪢n ߊR1:z `)1j* tnъB|aۑE7 S"6\+c^caF">*N ,JXKJ O+->~_g l"~B$?Nȸƾ@iQlzzv_2+Zg4*ѨQ,5忄 Is =}UgDVYTL')MMH,9şlx$쁫љ =xk~ )-,;AԵ^ Yr1jd 8 dMv=MكJr $`PoU4 %uY˽ZDnܝCOYiHk9 ߧnkȱg27/1 \`/"ijkVԳA:J txc7 2=;1S?~P3w]*_Oj>/X\V[(JF US} #d滎j~'%D'<U~S]30,gBvdGrԜ3I(f^v #ׯy5Yh۪T6Xc5.oUV)S ԡ]Vԙ> gHuM񼓚$F[KϨ .i*[$H%_~NU\F`[_es>vPU&X{}J.J$71RSkr ]~ɟ"Q'N:%[' WirR]ϋA50?1_dEg0ݶ٪zflgIg4"$Iv\ݑOWCʲA&?q. ?pk%+3gEP: {E2im#|kpQ5w|2lmZ `j>֑A08xl ^"Ψ3iLO'=nTk8hP7aә&+P8O%iZo*B]^˰=\Gx)r 嶮,`D[PzL%BpIB{e3T'i~u;eXzb &:D#3`%| #Z4Rvě+됺1ՅiⲜ,e#-;zj>[$ԭDlDxWEIխOF} -ܜhFwHZ{>X4\p)'aXߥhc'g+ۀ!rp K댗1Qm+oLiFVk2&UAլ>ձ[d {$p)#_;}E/Zp ~~wOfפoT[ji0dzjRPT!u%0& #@͢:CPE',lA.G~ALfsFsB.>ʷt :]G;GՖ3sͩ &]ļyX Xl b,JD'$1_9R3{1!|k/19M-.f3JrIQi3]ll{f4.D : MXgU&jOO|~㏃J<3&;(6" ƖۏX[9 ߒ,`I_cj?X;d] hZ}>֎a<>aj LR:?гE" [YѶ,/AtYET]QA9MpԥxZ-dͷZH|܈$rq謑z%=ƪkD찴Ca^wT)YZ ?YB3m΀Y%)ٛt)O:ݻ{j72\Y98/#!K$ؑ﬐09jAE&j,&4cGfc vdgTb.41cqr:`L0c37,hDjqA*U0 dc5;Ȣ4T"qI C R ׮K+ƙ+5 <!x+\ք+>A?"^ )aK~hsX4X] im131/6i7ҭ҆IƇ-)V/U˝u JѡBuK I)e!\$,DY,Ɋ7^OMν,RP2iXiʈXi YJA3|bZAkf.k5DRʏ䰃]cǿʆLન0N\|t QR+ĥwi xMCx.llyn #dgN|LpJ6Q#Xc/X ނ+64u^PK S-IeVYKbρy')I/p9+GiUI6ݞN2 IVk/oJiPh!mIr<.op/(*jǏ4Ȃj;r5uCNd9?.p!ը}, +Ώme!ZDN$_+?/Hoa&=ƑEmEMƳnWr {D;n xo]xp^1.[D-1F=e!RE;T_.?p/l\0`dI6n6v4qKUg:GH1j z](RmFR[upyw@Ɣ''176OC"wAU.%[A^5۫`𐪥UnH+{98wD;QxgMF>oQ)fes!SM !u.jn4#ׂ]8QB9rogtu0ib<& lݟ"7 %KJokk_ 45ή-p]a6iaM1)T$UfJ㥤558c+}_ł5Ɲ~D w5V2?Fj>Jfi-զa`mYiɝ`4-ҋGP vq,IՓK&k'? "Mĩʟ/{4+姣khg 'ÓSP:~pŭ\F.Si W1%ZlүYC`=5Juھ׋yi? r wt(7`U{|z7ZDG?ɏud>Iܼ"jid'XFgS$NI43ipINfR=k͞d")dӯdVTTwu: x+L}Npcg QV+NgsDsf IL/W8|_ +˛`ﮍج,eWI]¤yucAob")-fVb((x^]})c& ~1 QM^5ջtp ԇd8nR#f?3ީnQC;QvƀI@+ؐ5{iw!#LtCG;xcHdM.w1<.SQwZ uxVj=HG#С%5Jh '8Ce Ε1)" ̕z<93FɑR<,7a$-f[Y^dޒ.uf2ĕʞd[d"ФqEiT.bT3p 04,9V""ZQ -N+9{C5oD ) ϔ 53{{k8M=ˈgҌL+yvHwO^`H)}0)te](JCr+ F#m֊Iww¤7*h?#͖k% I;c{y"[ J5n:YrqN7}@u=DT6{wfi/[Nj$EJ'ݎq^=Hs #zi!0hI߲e|ߣED3Fvq^F?[ zo}|8n8vK a)`dDl(W՘-7FkC8$YҡvhѲK<}?wpKp8$y2Kw[g6N"o\AY>MnEo IU%&!iRV#œԷSn QaZPm2R5 nzE@-!͉+qMO4(u0łM؅3I80ӊՕzBE-P% &l3]˱#^qt;zu ,'E!/^&3Szu'k L X@蛲&Ρ@maEJkE}tC bD{:PzpWA "~ŃS GDs؃T6uk(jt~)|ROS&jx!sР0p@;!G %6Rn[xRuIǽ. moGDVȹ;}&vUG 2 v;4h_K ߺRٕ[H#-.ǸNyuO!*QT)x{ o}1Uk@ޣBziNFfe" CuDU'q!SRFxBQ6ZvEd65Xqj{B3e:8/B8ɇƥ,Z"Z? Nb* a ٬i0/3@_uv7ʙ֥uHIJ %= bp]ӧܐ35e' ˘-93x#O RGfHow?녜'm9En *#!NA%rE4f7Ŕw{_,ߥ~MNghy6dif[~rsa'] 1hf%@,g\&Rkգ9ݕ,`>04ѓc0S\zZMV{hm괺4HeU+fN g cՐf:ֹ갋! Q]J,+>$\$?N߃˴dJH9:j,2]M5KH~` Y4:^GHz7˥iQKj1X~}6+cMB[54^md'6 = HO͆{GZU82@0s2xMx"7zxU?0-ޖϘ>%5٭zV;NHp0zNr=H' oLfiZaWә'-vLU޸N!i8Cqcȇ@|Ko@'~&A+}o՚ͺFMAHN!pu%-o *7 EXW`ajTiIW)9x\!- k6*Oa:[|-l'3m멎`5JǼY1gZ*;U1؃ Fap==wIJqj(؈ӱ}` 4|lA\ұi?wv%^(rt8|[x?d{RB5bTO$-.'*$KnABZtJI@mY=?$dU[`8IshGjFMO2imROԝu:lAT{}?eo9X5̓K%::+up|=\,f9@!v~93|@qU` 1瘚,{5IQuFC2X2>9A<2 鰸#HNM`̾+ "4.e6KU ݂~2вHlKȿ''[wGu~Pe zG4._=kq'p.b+-vأq pcZ' R8O\ʨFX65hVuґ^J;o Q^rcк*ߴ-fyjp!aNM)>-Rn(5!EfG#t%pK)hÍ=R^Q6 {V7դ=isikN̡u#hN~xTe}d3>yvm ZaA`Iٍꢮ{ޒ4 2K^C^1L7]U[E\u H ֌ &#aF*pJ\ҝ#Y:k t?eeR7=l R(EG3j-%NV~'͑(zL.kMnwUG]0&@ԐdvݢslW!Zp9u5!Ӡ&' &VwٕjAysG],h#w26T ՝/*"6r7xQhc`C(sפ-/١z|&w3ŝu8DYjJ^h-_ 3dD;1EP3A7JX21eth1V.2,lC4Hw 5푺 74;g{LAq-*#GcO?y ą(^9BC15*]*:.RGW Ic?s͎I'v%̲8 z@.)ym}?$!}  S%rj<O'}(t*fPG9fگ{ק8OGkۦRXM9zcUB6W8 |DE'qz 6rajٱ)Q-=Vhn:j ԇ YJ>Tuh SN3Gz|Uv,|Gz+!;IKCԶ4UA!1H*Y5@)˭]!z6I1OP9/p5)z_\~\xQMP~Ҭ!MBӍ%Fޡ 9W3]ˆbӴRKuoܣBlJ7_11Uu;} cq &W @O{ŒQmԫ-I愵ب ȕ~Wbe[割mlA2V3 +‘LX|f!H}, -ԌPTX^]٬~~huiÙ iA<̯ "_yZok?9뒕R”!&5!ogv!`m,uAgR4uy5AP:D1Zik,[+D9L]lmBUqXqHSn٫Y.BP̲h,6CЌ톩@PoZH yG+|n9N{8h$,"/Aw[P~e|~V·~'UH.0,tu?屟ߖfs.nUV[rJˮ/s,JgÖ9"F[5Ǧ\f(pjW͋AӃسUJrZ)-p"=^Bp߅X^t{,ܻh9;̔IcAS=} Sk,ÚVv) }w}JQ6; 48#;XjA{xv1lѫ;on QixͿs0 ]Y gi q.dH(9(}2GC=.N'7$]4sT-1T7twX5æ[?C\9c~fMȡ Vѡٕ&ݏ(2l ɐCR?2')")HLRT\K֣ا|D[< ]󰿛0^++g ̜s>~àQɟEB6$x  v+NPzb0x a]T7뽊l:d g?٥ۆGt?85y< Fj'4cN!,{&Kt6T0U~B6j& ??#ږ_=3+Yʉa29,V{NNх|ad땜xַh%&j8 OH[h$븛K)BdH҅<=//e/kO *#|#vi@79{GԲ [ŞPv I)]2e3i.TVp < sb|!vmE]| I aes}/"? +`uчQfɍ9@(n]Y.cXUrhdƤ esfFOHl)ւjTwzVPT5u9'KA/q=jj+🂯lϭGOʍZkнBknJRƓM&[G+ h*YY1BQHċe+87, EPW9a7ӻQm)l`첹o`3P`Wvf{&*~9}}Ήkì_e^0") hVDe`%ϴؠ bhye@F(<2, .z5X.7c7myZVnog$8WQN%A+$L`ky3?ګvM6EjTg4ߦ)"\ H~uz::ffGէH&t.)ФhIZ_J3P8ׯ2rheC@tG_U^ d׆ 2xHpJv,!En,I(~o;dXE}a+B 1(Kg|t_֡msVYUQ_y թnvOJAv}(Mxa7'sji ʙa[DZуZ~Ej]gđEmFum:+dv+?ܺ |UV]]:|res8,=qd2hu\-mNH3! ^)_hc?ΏfN6M=s(A33QjTsH[$=1^z>d3`jVyҧX\Ӓ5`D1c\!9 Ej*[G4L~N? Wrl;v"+T*iF0-~'3 ]ovp8V6N\4׺g^FдMhŨfQUlFlבI]a%[[P|$0O#C{Pz8KXhv5reތ nA݂BHNӽud9t(c%љ,VAt$O4{p(MĦI#-PXdK{RM1Ri +ZW*riIw']iHT!M(X(N=AkF]:JҋHdXruZE&'d`F~ "TN-8)bDg%LQ[yr\x0{鋾_+T^7jy.A@O@L5MҶݒ61.5*g.u`7-sL(k[be.VQt*_64wIP6l\=\_i -wb{tϳ/;5 é5I1O C>\ћQ$ ~uaN?i8-\MoI.y4+ԁUQ]|59(dp`N T%2Y #|F> VH(~nnϒݻ;&wҿS:H2\ƵLWonTx7).5 k4'ث]EEO֡߳ 13Ղ|k/>I2}/b:Y+PW*gpty.Hg7e&HNA̝΢rwf&Ш(ʼg74^hkRqMs}@eܽLA5:CBfdp K{H&&sJFky Znܐ߸a?Ic9Oiubb8 |p 6l<4Ö$CwHn=ړV]֞4 g(“u]4P?e /&봞X+B^7@OZ[eT $y˸#˾['%,ĹSCr*v%RɞLY8`\y@Ә5h$JiԼ4$7w"^0`!&˵!K+r$a&k6cѩ2a3XC1 ho\t"1"˰ ͿfW]f` v2?L! M=<>\v4(a*҃n.WqkⰕ*s'UR$wɀOq2j=})[އZC 4,"^r%>5K#'{˰AN/ ӒqB $QyG<; gcV$Hg8cL4op== k|v}<}g,L9j DCmZBO2w* Czޝu@W bkmTq=L~Y\ݡ\CM IâX6jr_PMK$:UII{?g[+ZRO.:CmCjNoռJMnu_ܥ^P'8J(い@9އ:=+;+n\4{\r{q%LH2p"~Q3*d -Eu i p;Dj'y%{JjVQwy=׀X˖cML549PovȰZVg -֎ّUěꚝ_P(̹W՗[%R* \j $mu'KM(XӐoyɢܻl-RH C :|s'XLt-a\@]@m:Ԯ} U 亚*(x;tKq87ܣjT82 ֞6>- k38p xD0ѫFF J*6dIa`8f9 50pX0LD_jdF@>H¬0'lAHI4eL[ח]A\)I⴩#== s %c`6d oApdLցJE-̹ٯsTZlگMH7>AZ.*b34GuVLXIkp~K6!onA/P>Z %YNuW5䮜5ʓO֬6pFʦe5t/F L'EؓBdB?X?+H6&)BVZWt5 QhgԆ 6).¾Za6ćCvhsjt199NH%mhܮhz +?o*lFuHDDR 2lؠ&񑖢ZzWMɃPaE<H|\]0ܵXy@?^{ Eߢ$lMUOr;^83_U=4‡4ΐ홭fic`)kfhcNJQ6`68߁7Lj.v>/}X3{uUc0.bű,[q`H@,4ǣ{q˩Of7BNo[^%c P_7>R$=JMVʟE iH˴"!I3]j$M"Usf 5zӶ Dz,Ht P'<(MV[ߍٞn.!4zQlWtfҡ ׉^_#wԱV)RGu:aR^Mڕ XЍ,y։k2pa5秝zjAU"'(aKnqن *╵9_ͧ'܁ 9A-^m`j4 Mޓ9~^u:fKc;"*̺[$ s'ڌ DzssUmȡ}Q^ SUXrfQ-Fg@u%SaH'=s؊=YVK вip=)}_~>@[ETN8Rg\dD"Z) ;+EaHGEci/%AA!"N 1@6#l HA$ά4Ժ]{ (0aw!R;O u}1i:Y@"L[:7..>WTg!~ъ쫣 ?F>M]Qր ~.Qa9JߦP4ĩ)xAPlT>ߞaۼ2ÿh0Ly[J6N̏& `O4@J33-r}Pvfj꩎|Vl=N\N].fsH'wv:Ms8I]gBPk)ʎ1ÇW>&d dOGQջF){Ƣey2PZPl9 9:8ٍ/vuk뺾@%yXv&4Oj>Vh#Ifakvib@O>͊hL_[ ~s&ҼSK"Yqu,6MRdI jhUt2 "zg{ 8 .c4D^άbۿ8Uc<.w4ы('U]~'0˵PF7^"/Lf TJ(Ʉ1 C[}U-qm5aJ|.k (O,chfI`C}vAFWe"~Uש$;F*1{219$4)rl6w uUi K~8.,#A l+T݁r>(xZP}ma4nI3e"אx{ҷةO6YF_S6e+[ ~)-Uol kML Y$o2HF--/\e1J :p]19Q9Z$Y2toX(h^!Ag4J%y?M H :2<)1i@F_٧NL^F6޴3ViVoYl=pJcWȦ֛!W k~5.}Rñ~)ogZe "'zak5_VV {}v݄J4:bGoR< muIlNf g(f  H\9>s DeT 5Mvr;@8/2o;`NY)mvKZ`͖^2;i-..镺ȳ'@R6(xS,&ғAL\@VȖ-)I܇l?D?+팭%yNKs4So}t^k)#,D ]p$m:|`)@JiRHD+>-Ek6;uuP8VSpk1.x$Xq6K9͈)N `#V%?f*Vّ}u$XlrMvYIA3g XnN}s#;>S6[fw8Qa a͖0Xu'P1uL '|i5GnRR0f{\$|!<Ôt @#8ql fA $gC/~>籩Gdg֙g,ы Ք$=ȭ^MU|к)JU'?ny MހT_u\o~Rk&/X:, RπT 3d pPdKvRDՄQ@x+0rS3%Gd<zA[ced̊v9<^xChX@><ѬJnW$ur`0VQfE<)}ZV|=1PTC;;46XxslL{'Ϊ| 3ˇ)v=nrhpHg#bof_tiT:Xƣ|CX+s9V nYܐ| (Z>8i d+c<íCDbCU[p%qJLJ^i3_QbA=g2C=D'z tb, $r~nF4,ΨW>MJ}Bghip&Sv@V1Bbrt.[}89 0(@ Z9D˔ ;ӖNOjZ[hܜlHf*w{jH귧4T)p ]ݍǵ=M\oqYl4qOC rϟ0 %R311> 1.G†R3˳9{Baړ]WpKd2RBX^7$؊U=b[ 7ԱV[ɟ*(%".p=bͮ[aN!Vpoښ*<-ݼzA ~}X E"LT f\9] lb%lUcwi%1yۻu S]ᩭ%ޚĜm#[4]$)X,Tڊf+c_E-̉勚2ЍES;K qq#w鸻K=9݉_R24ۤh7'00hI2%EIF\.9 nON$1([5+>tkm$\$MYhڭY0ȬX!tZV;W Y됖"QLYKGY(pi7l"6}MbL'%)v2fx5 Ky~zbIc>bLm@ 7 Տ^c%+aVM=(Zp+S[N;eY@+@]9(V#_A^QkH=\?Y+6)j e10,G>K1LМh}{){`W[pNX'zם&p׳f%{,;xudSOҶ1lpp4(i{k-2s.d*Z[/¨0?|o!s'.Ag' "\*ϴ|VΓ%NS$ce\oڇ'TWi^i|OTcqa=c-RYoAlaO"sۮvnIKFcMB͔"x/QV$dK:rLUjz$Z{H.,*xԏWדٝ C=J3jt}<zm@%[aR 7M)1Մ6G G(H"۶d(;e2nuC2Tgwݖ- >&fk *̎ ~t~&H MvZkT JZƏ=CV9U䴢/ i N (({:GiS#e\>\.>{uy[:J\bvcEᲧT'ZNRkxwsd¾}Ε:f[Y\lBC4JҍpL J+h֏e"J|Iϟ?˂0g~|N{Ƚ$)B=i7p|CO-lk4{R:Sڿgq K/b&f}f35 93Gړa[;d Si'ao{i)T (wIƏ\8ݻo+jBtp Q: 1Oљ6S?;Ӫԓl落*:7797a}Tt_vRD(L'.Ey5*E{۠JZ \:7ޒaZkU5Jk 绀L rf2F?=t&%/H |~W,L>` [ɶl0^Pl62xrm;=܏apsu{7I C1Qϯ2I\Ѯb!&/*Q%W-F}9NR^9>e?![|kL߷H_RA y%RaVy8TxYu?ڹn3}GD U8I@MnAm1 7OG6\Ӌؔrه̾ zOpԕHd-HI1WFGP ۯOǧ41-ASPMf]g\H\_K%hDԇurkUíhqPvR/7a2.148@9#Vۢ!vS!?$FwݯIkV\Aei Ca6iYUA^tefCL O@bsrvhb{!44Cvp95s|._ Y5 XsJw0~p$+Ip`Dq]}2ʬ̖E?gcQ"oK3~;0bޚ.x M Cv\:\`Z- R!sgΪ'd&]Mt[}ULg2J!2: %Ѫ~nIIJ#u֝RLV e+~/ĘRM,}4y@ȣɷױ0JA&s<&߶EEHj^妔'{Ez*a$THEi%,gMYY\ %4Sm Qϙ Hw%u6⑻ǑZ~:LЈBR-b 7X<?15`Ɵ!-\բR;Sتcqp1,}a>`е#u(Jm`j (u a1GVϜ`e{LIZ='tTSQ" Z]i2Xe(8w&5Z!$\J VZmbk]$B=w0uխqⶩ{vMJ=S|DT/}fK毄ތ<}ٮ$>nj$szƓnA&}G8 |;$Av﬎%BBRx;J/B%+1ؔdtF[畳&l,+}]\X^op׮zNLՇ2;)mP1Q”Wn?O2B#Ly¦̑ZQV@Uݐ$=Zlv{uui׭u0_MAU:gLjQ% ^g"<)Gk.Ƥe:!)tgي3 ׋ M5r4? Ӭ,Wz{YL ƃ;ST?F)tTT۫/>= v0t.FF%di% Pm֚ /Gqi᫿GҴ~T;U^p)+Ǧ &cxbAC]>N)I78cwLdnz"tfQ7B"6 [2Ǻϓ 74F5yw3_<6N pg|a7 \~ڱ{3bH-Pb7͒#uK[Rwa#s~}5/QR; iSvA d'Ooz@ڗ2$dm`7 (SPy iǽzI#|c/#'jVWMfj6Hwdu dNؙVGM>.h+c3N 镩h*.d[+&,$@=:ޤQjw&WQPn/~"kiŖamуq0f ^9PapyDuNs{ 1J"QOxn$ Q֥OŢK,S蟓^lb-DU,$!fj1TZj+u D%܀k3HW7{ v*ס$g=(ïAZQQ)=0h8qpIjxGO?=M:Ͽj1|^6NjECҜՆQdM(cwh?C8[րo?_ ?_ݎy%?0 VY++&s $iivѧ&!~Bsɴ04:aF| @Hک9$(Yo۴{M[LS+\,=RT˿)@1mx+Fl-*{Ԝ|MWx>] ʍ83${5a^O>nitޛ<6~vSHB2uU{머}7@e Wɻ!Uj bt!.:?ysjo;(4a{㏑fhRwEo[9kL],ם\CQJ>w{pX tmM,b$u~ue^` > / `Eh_[~N@"3պ<'dBg=ZWFJňoir8^\ ]8ʨK?Qn: tsxN N\\^A̭VZ;<稗 7@.Ew:]F #aҘ * %`g8N| L-!+Aʑ쉏jOB] ; Ÿ\`1ky^JG7-fxZٸ-ZqVmVW;{Ży\3FxD9bqBA{,ܽ*_۳}4rbLFCNV [` ȹe11\@|YL :> S#>āFb,p^g_t4;i{T.<ptECX<@j.< }[-O#A=j.Ev(6zq9uVT[.fBMGeDz#O;NY`: o?gtyX%x, oLg;g'dLe76ް7"agd6>KPGƛ)FuԆ̾5F,=Dmҙ~#LgJ+6 ɴOX̱@L[ ;\XO:sHˋ]tm״2ՏNS*K;pXH??'Y EX̏ULXWXI(:7Ag<9Dߣ+GP)X%U%UEc@/3E(=a3. }X_i㢲TzGIVMޤYgz/z&2N_X 0jF\G^TvD5 [+ +&偃fl!Q@8k?FGٺp,E d; ʅX{@:* Rd*2j Jk2c^қ4..^T +ON8 Ro@5xV^T%鍥܌楒Bp`+ϐ]t$0Oɖ*}Q[BߑY<,`;  )|-+;V2 5xH_<_Y{0:hHdZb7GY8N\ӯPUn>|ϫd*